2017-10-18 46 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文档非常清晰,易于使用。 –