Lorsque j'essaie d'obtenir des noms de propriété à partir d'une classe, getOwnPropertyNames
ne renvoie que les propriétés avec des valeurs.
Existe-t-il un moyen d'obtenir TOUTES les propriétés, et pas seulement celles avec des valeurs?
[ 'firstValue' ]
Résultat:
class Klass { firstValue: string; secondValue!: string; constructor() { this.firstValue = 'withValue'; console.log(Object.getOwnPropertyNames(this)); } } new Klass();
3 Réponses :
Malheureusement, un accessoire sans aucune valeur ne sera pas visible par getOwnPropertyNames
.
Définir le prop sur, par exemple, false
ou undefined
, l'affichera;
this.test_1; this.test_2 = false; this.test_3 = undefined; const allPropertyNames = Object.getOwnPropertyNames(this); console.log(allPropertyNames.includes('test_1')); // FALSE console.log(allPropertyNames.includes('test_2')); // TRUE console.log(allPropertyNames.includes('test_3')); // TRUE
Le fait de placer des valeurs par défaut dans les propriétés vous permettra d'obtenir tous les noms de propriété de cet objet, car toutes les propriétés sans valeur ne sont undefined
et n'existent donc pas dans l'objet lorsque vous l'imprimez.
Mais pourquoi avez-vous besoin de telles informations? dans l'exemple de code de question, vous connaissez déjà tous les noms dont vous avez besoin ou que vous utiliserez.
Vous devez définir toutes les propriétés possibles à l'avance dans le constructeur. Les options facultatives doivent être définies sur null.
constructor() { this.firstValue = 'first'; this.secondValue = null; console.log(Object.getOwnPropertyNames(this)); }
Une propriété sans valeur est une propriété qui n'existe pas. Je ne sais pas ce que vous essayez de faire.
Ce n'est pas une compilation de JavaScript.
En fait, j'utilise Typescript .. Lorsque j'essaye vanilla js fonctionne comme prévu.
Remplacez ensuite la balise javascript par dactylographié et corrigez le titre
@Samathingamajig terminé ... désolé pour ça ...