J'essaie de créer une méthode get et set pour une propriété:
private _name: string;
Name() {
get:
{
return this._name;
}
set:
{
this._name = ???;
}
}
Quel est le mot clé pour définir une valeur?
typescript
MuriloKunze
la source
la source
typescript private name: string; getName() { get: { return this.name; } set: { this.name = ???; } }
Réponses:
TypeScript utilise une syntaxe getter / setter semblable à ActionScript3.
Cela produira ce JavaScript, en utilisant la fonction ECMAScript 5
Object.defineProperty()
.Donc, pour l'utiliser,
Cependant, pour pouvoir l'utiliser, vous devez vous assurer que le compilateur TypeScript cible ECMAScript5. Si vous exécutez le compilateur de ligne de commande, utilisez un
--target
indicateur comme celui-ci;Si vous utilisez Visual Studio, vous devez modifier votre fichier de projet pour ajouter l'indicateur à la configuration de l'outil de génération TypeScriptCompile. Vous pouvez le voir ici :
Comme @DanFromGermany le suggère ci-dessous, si vous lisez et écrivez simplement une propriété locale comme
foo.bar = true
, alors avoir une paire setter et getter est exagéré. Vous pouvez toujours les ajouter ultérieurement si vous avez besoin de faire quelque chose, comme la journalisation, chaque fois que la propriété est lue ou écrite.la source
myFoo.bar = true
au lieu demyFoo.bar(true);
oumyFoo.setBar(true);
??Ezward a déjà fourni une bonne réponse, mais j'ai remarqué que l'un des commentaires demande comment il est utilisé. Pour les gens comme moi qui tombent sur cette question, j'ai pensé qu'il serait utile d'avoir un lien vers la documentation officielle sur les getters et setters sur le site Web de Typescript car cela l'explique bien, nous espérons toujours rester à jour car les changements sont fait, et montre un exemple d'utilisation:
http://www.typescriptlang.org/docs/handbook/classes.html
En particulier, pour ceux qui ne le connaissent pas, notez que vous n'incorporez pas le mot «get» dans un appel à un getter (et de même pour les setters):
Vous devez simplement faire ceci:
étant donné une classe comme:
alors le getter 'bar' de la propriété privée '_bar' sera appelé.
la source
Voici un exemple de travail qui devrait vous orienter dans la bonne direction:
Les getters et setters en JavaScript ne sont que des fonctions normales. Le setter est une fonction qui prend un paramètre dont la valeur est la valeur en cours de définition.
la source
static
.Foo._name
devrait être remplacé parthis._name
Tu peux écrire ça
la source
public
définit ici les membres en double.TS propose des getters et setters qui permettent aux propriétés d'objet d'avoir plus de contrôle sur la façon dont elles sont accédées (getter) ou mises à jour (setter) en dehors de l'objet. Au lieu d'accéder directement à la propriété ou de la mettre à jour, une fonction proxy est appelée.
Exemple:
la source
C'est très similaire à la création de méthodes courantes, il suffit de mettre le mot-clé réservé
get
ouset
au début.Dans ce cas, vous pouvez ignorer le type de retour dans
get getMethod1() {
la source
Je pense que je comprends probablement pourquoi c'est si déroutant. Dans votre exemple, nous voulions des getters et setters
_name
. Mais nous y parvenons en créant des getters et setters pour une variable de classe indépendanteName
.Considère ceci:
Le code ci-dessus fait ce qui suit:
get
etset
créer getter et setter pouryourCarTiresCount
( pas pourtiresCount
).Le getter est:
et le passeur est:
Ce qui signifie, chaque fois que nous le faisons
new Car().yourCarTiresCount
, getter court. Et pour chaquenew Car().yourCarTiresCount('7')
setter s'exécute.tireCount
.la source
Si vous cherchez un moyen d'utiliser get et set sur n'importe quel objet (pas une classe)
Proxy
peut être utile: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ProxyRemarque: sachez qu'il s'agit d'une nouvelle API non prise en charge et polifill requis pour les anciens navigateurs
la source
Si vous travaillez avec des modules TypeScript et essayez d'ajouter un getter qui est exporté, vous pouvez faire quelque chose comme ceci:
Ensuite, dans un autre fichier, vous avez:
la source
this
doit être non défini au niveau supérieur d'un module. Vous pouvez utiliser à laexports
place, mais vous ne devriez pas le faire du tout car il est pratiquement garanti de causer des problèmes de compatibilité