2017-10-18 2 views
11

J'ai un site avec 10 pages, qui partagent un fichier Typescript, et chaque page a son propre fichier Typescript. Une page a un plugin JQuery, timepicker, donc j'étendre l'objet JQuery en utilisant:Comment puis-je étendre pour un seul fichier?

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

Cependant, je ne veux pas que les autres fichiers tapuscrit d'avoir timepicker sur l'objet JQuery. Comment puis-je l'étendre juste pour ce fichier?

Il ne me laisse pas étendre JQuery à l'intérieur d'un espace de noms.

Les modules peuvent-ils aider? Je n'ai pas besoin d'importer ou d'exporter quoi que ce soit, donc je ne suis pas sûr que ce soit approprié, ni comment utiliser les modules.

+0

Si chaque page possède son propre fichier Typescript, pourquoi ne pas simplement ajouter cette ligne d'interface à la page spécifique qui en a besoin? En passant, vous n'êtes pas en train d'étendre l'objet jQuery en écrivant une interface qui est aussi appelée jQuery :) – Kokodoko

+0

@Kokodoko C'est ce que je fais, cependant tous les fichiers Typescript du projet voient cette interface, et montrent 'timepicker' sur 'JQuery'. – wezten

+1

C'est probablement votre IDE qui voit l'interface 'timepicker' et l'applique à l'ensemble de votre projet. Peut-être pourriez-vous utiliser des espaces de noms pour différencier les pages et avoir des interfaces seulement dans certains espaces de noms. 'namespace page10 {interface bla {}}' – Kokodoko

Répondre

0

Vous pouvez littéralement inclure les éléments suivants dans votre balisage de la page:

<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"> 

Et puis le faire tout avec sélecteur de temps en utilisant l'astuce suivante pour obtenir une poignée sur jQuery:

declare var jQuery: any; 

export class Whatever { 
    private timePicker = jquery.timePicker 
} 

C'est super hacky, mais je pense que ça marcherait.

+0

Ensuite, je n'ai pas d'intellisense pour tous les objets 'JQuery'. – wezten

+0

@wezten Cela gardera vos instances propres en termes de temps d'exécution réel. En termes de votre IDE, cela a tendance à être une chose tout ou rien. Les documents jQuery sont super clairs et faciles à utiliser. –