-1
votes

Comment puis-je obtenir toutes les propriétés de classe, même si elles sont facultatives avec dactylographié?

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();


5 commentaires

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


3 Réponses :


1
votes

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


0 commentaires

1
votes

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.


0 commentaires

0
votes

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));
}


0 commentaires