2017-10-18 32 views
11

我有一個有10頁的網站,它們共享一個Typescript文件,並且每個頁面都有自己特定的Typescript文件。一個頁面有一個jQuery插件,timepicker,所以我延長使用jQuery對象:如何擴展單個文件?

interface JQuery { 
    timepicker(options:any):JQuery; 
} 

不過,我不希望任何其他打字稿文件有JQuery對象timepicker。我怎樣才能擴展它只是爲了這個文件?

它不允許我在命名空間內擴展JQuery

Can模塊可以提供幫助嗎?我不需要導入或導出任何東西,所以我不確定它是否合適,或者如何使用模塊。

+0

如果每個頁面都有自己的Typescript文件,爲什麼不只是將該界面行添加到需要它的特定頁面呢?順便說一下,嚴格來說,你不是通過編寫一個也稱爲jQuery的接口來擴展jQuery對象:) – Kokodoko

+0

@Kokodoko這就是我所做的,但是項目中的所有Typescript文件都會看到這個接口,並顯示'timepicker' 'JQuery'。 – wezten

+1

它可能只是您的IDE看到'timepicker'接口並將其應用到您的整個項目中。也許你可以使用命名空間來區分頁面,並且只在某些命名空間中有一些接口。 'namespace page10 {interface bla {}}' – Kokodoko

回答

0

你可以從字面上在您的網頁標記如下:

<script src="//code.jquery.com/jquery-3.2.1.min.js"></script> 
<script src="//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.js"></script> 
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.css"> 

然後就是做任何與時間選擇器通過使用下面的技巧來獲得jQuery的一個句柄:

declare var jQuery: any; 

export class Whatever { 
    private timePicker = jquery.timePicker 
} 

這是超級哈克,但我認爲它會工作。

+0

然後,我沒有針對所有「JQuery」對象的智能感知。 – wezten

+0

@wezten這將使實例在實際運行時保持乾淨。就你的IDE而言,這往往是一件完全沒有的事情。 jQuery文檔非常清晰,易於使用。 –