Comment définir la propriété statique de la Machine a ecrire l'interface
Je veux juste de déclarer un propriété statique en caractères d'imprimerie interface? Je n'ai pas trouvé nulle part à ce sujet.
interface myInterface {
static Name:string;
}
Est-il possible?
- Ce que vous essayez d'modèle, exactement?
- Envisager l'utilisation de ‘implémente la classe Foo Bar’ où la Barre est aussi une classe. Vous pouvez mettre en œuvre des " classes par d'autres classes de TS.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas définir une propriété statique sur une interface en caractères d'imprimerie.
Dire que vous avez voulu changer le
Date
objet, plutôt que d'essayer d'ajouter les définitions deDate
, vous pouvez l'envelopper, ou tout simplement de créer votre riche classe date pour faire les choses queDate
ne pas le faire.Parce que la Date est une interface à la Machine, vous ne pouvez pas l'étendre avec une classe à l'aide de la
extends
mot-clé, qui est un peu dommage que ce serait une bonne solution si la date était une classe.Si vous voulez prolonger la Date objet de fournir une
MinValue
de propriété sur le prototype, vous pouvez:Appelé à l'aide:
Et si vous voulez rendre disponible sans une instance, vous pouvez également... mais il est un peu capricieux.
Appelé à l'aide:
extends
mot-clé. Vous ne pouvez pas étendre une interface avec une classe (que vous devez faire afin d'ajouter une propriété statique).Suivez @Duncan @Bartvds réponse, ici, de fournir de manière pratique, après des années passées.
À ce point après Tapuscrit de 1,5 publié (@Jun 15 '15), votre utile interface
peut être mis en œuvre avec l'aide de la décoratrice.
Renvoie à mon commentaire sur github question ouverte 13462.
résultat visuel:
Erreur de compilation avec un soupçon de méthode statique manquant.
Après statique de la méthode mise en œuvre, conseil pour la méthode manquante.
Compilation passé après les deux statique de l'interface et l'interface normale remplies.
'constructor' is declared but its value is never read.ts(6133)
return (constructor: T) => {}
return (constructor: T) => {constructor};
staticImplements
Propriétés statiques sont généralement placés à l' (global) constructeur de l'objet, tandis que le "interface" mot-clé s'applique aux instances de l'objet.
La précédente réponse est, bien sûr, correct si vous écrivez la classe en caractères d'imprimerie. Il peut aider les autres à savoir que si vous êtes décrivant un objet qui est déjà mis en œuvre ailleurs, alors que le mondial de constructeur, y compris les propriétés statiques peuvent être déclarées comme ceci:
Vous pouvez définir l'interface normalement:
mais vous ne pouvez pas tout
Pour exprimer qu'une classe doit suivre cette interface pour ses propriétés statiques vous avez besoin d'un peu de ruse:
Vous pouvez même garder le nom de la classe, Tapuscrit (2.0) ne sera pas l'esprit:
Si vous wan pas à hériter de plusieurs interfaces, de manière statique, vous aurez à les fusionner en premier dans une nouvelle:
Ou si vous ne voulez pas de nom fusionné interface que vous pouvez faire:
De travail exemple
@staticImplements
.reply(msg: IBotMsg): Promise<IBotReply>
@duncan solution ci-dessus en précisant
new()
pour le type statique fonctionne également avec les interfaces:implement
?MyType
(comme dansclass Foo implements MyType
). L'interface statique est réelle, utile dans les définitions, lors de la description du code JS existant.Si vous êtes à la recherche pour définir une classe statique (ie. toutes les méthodes/propriétés statiques), vous pouvez faire quelque chose comme ceci:
Dans ce cas, la statique de la "classe" est vraiment juste une plaine-ol-js-objet qui implémente toutes les méthodes de
MyStaticClassInterface
Vous pouvez interface de fusion avec l'espace de noms en utilisant le même nom:
Mais l'interface n'est utile de savoir que ses biens sont
Name
. Vous ne pouvez pas la mettre en œuvre.J'ai trouvé une façon de le faire (sans décorateurs) pour mon cas d'utilisation spécifiques.
Le rôle important que les vérifications pour les membres statiques est
IObjectClass
et à l'aide decls: IObjectClass<T>
dans lecreateObject
méthode:Autant que je sache, il n'est pas possible.
Malheureusement, ce n'est pas la bonne vieille Java.
Oui, c'est possible. Voici la solution
Foo
à une définition de classe? où la Classe Foo de mettre en œuvre les statMethod (), cela semble un peu un hack, esp puisque les espaces de noms sont un peu obsolète maintenant...waiting more feedback
. Ainsi, vous pouvez soit attendre jusqu'à ce que des méthodes statiques sont ajoutés à l'interface ou le faire de cette façon.export namespace
est en fait votre implémentation de la Classe? Il semble que ce soit la flexion des choses beaucoup. Je me demande quoi d'autre que des pauses dans les Classes?