Comment puis-je prolonger un Tapuscrit définition de la classe dans un autre fichier de définition?

J'ai une bibliothèque JS appelé dépliant qui possède déjà un fichier d'enregistrement de fichier de définition.

Je souhaite utiliser un plugin qui s'étend de certains objets de dépliant avec une fonction supplémentaire.

Dans le fichier d'enregistrement du fichier de définition des objets sont définies comme des classes plutôt que des interfaces.

par exemple

declare module L {
    function circleMarker(latlng: LatLng, options?: PathOptions): CircleMarker;

    export class CircleMarker extends Circle {
        constructor(latlng: LatLng, options?: PathOptions);
        setLatLng(latlng: LatLng): CircleMarker;
        setRadius(radius: number): CircleMarker;
        toGeoJSON(): any;
    }
}

Si j'essaie de le définir une deuxième fois dans un fichier distinct, puis j'obtiens une erreur à propos de "Dupliquer l'Identificateur 'CircleMarker'.".

declare module L {
    export class CircleMarker {
        bindLabel(name: string, options: any): CircleMarker;
    }
}

Ce sens que c'est une classe, et non pas une interface, mais ce qui est le cas est-il un moyen d'étendre la définition de cette classe sans changer la définition d'origine du fichier?

Le fichier de définition de base est tirée à partir de DefinitelyTyped via nuget j'ai donc un très fort désir de ne pas apporter de modifications qu'il va faire la mise à jour beaucoup plus maladroit/sujettes à l'échec.

  • Pour l'instant, je suis simplement en contournant le type de vérification qui est ennuyeux, mais réalisable. (<aucun>marqueur).bindLabel("Bonjour le Monde", { });
  • Vous êtes essentiellement en essayant de faire des "partiels" de travail (comme en C# par exemple), ce qui n'est pas une caractéristique de la Machine. Ce n'est pas simple dans un langage de script où tout n'est pas emballé joliment comme dans une .NET de l'assemblée.
  • WiredPrairie: Le C# équivalent serait partielle d'interfaces que c'est sur les définitions de types plutôt que des implémentations réelles. Tapuscrit soutient d'ores et déjà ce qui concerne les interfaces blogs.msdn.com/b/typescript/archive/2013/01/24/... "interfaces en caractères d'imprimerie sont ouverts, ce qui signifie que vous pouvez ajouter vos propres membres à une interface en écrivant un autre bloc d'interface." mais elle ne dispose actuellement pas de classes. Je suppose que c'est pour l'ergonomie/design raisons plutôt que .Net métadonnées être mieux.
  • Je comprends C# partiels-et le manque de réelle Tapuscrit partiels. Cependant, la CircleMarker classe n'est pas un interface, donc je ne vois pas en quoi c'est pertinent. Le défi est que les interfaces sont juste le temps de compilation des contrôles à la Machine, il est donc possible de "sortir" de leur. Cependant, les cours sont un véritable JavaScript construire, et beaucoup plus complexe à étendre proprement et de manière cohérente.
  • Elle est pertinente, parce que je suis en création d'une définition de code JS existant, de ne pas mettre mon propre. Idéalement, la personne qui en fait la définition d'origine du fichier doit avoir utilisé des interfaces, mais ils n'ont pas, et je suis maintenant coincé à essayer de contourner leurs choix de conception. Il y a divers billets à propos de faire des classes ouvertes comme les interfaces sont, typescript.codeplex.com/workitem/917.
  • Le résumé est que vous ne pouvez pas faire ce que vous voulez. Ce n'est pas une caractéristique de la Machine. Il n'y a pas d'élégantes solutions de rechange. Le meilleur choix est de fixer la définition (bien que je ne suis pas sûr que de le faire pour la raison que vous voulez, c'est forcément une bonne raison.) Vous êtes à la modification de la nature de la classe.
  • Je pense qu'il serait mieux rédigé comme je suis l'évolution de la nature de la définition de refléter la réalité du Javascript, j'ai chargé, mais c'est juste des arguties! Auriez-vous l'esprit de soumettre une réponse indiquant ce que vous avez dit ici, que c'est pas possible. Je serai heureux de l'accepter et de vous donner le crédit que vous méritez. Je vais probablement juste coller avec mon <aucun> cast hack pour l'instant, c'est moins sûr, mais ne seront pas remplacées par la prochaine nuget mise à jour, comme la modification de la définition.

InformationsquelleAutor AndyJ | 2014-04-22