4 votes

Propriétés par défaut de Typescript lors d'une conversion de type

Existe-t-il un moyen de classer un objet dans un type de classe de manière à ce que les valeurs par défaut des propriétés soient respectées ?

Par exemple :

class Person {
    name: string = "bob";
    age: number;
    sex: string;
}

var data = {
    "age": 23,
    "sex": "male"
}

var p = <Person>data;

console.log(p.name); // -> undefined

Quelle est la manière la plus simple de le faire ? p.name C'est Bob ?

*Modifier

Cela semble fonctionner :

var record : Person = Object.assign(new Person(), p);

S'agit-il d'une bonne ou d'une mauvaise pratique ?

3voto

Meirion Hughes Points 1855

La manière la plus simple d'obtenir une instance de la classe est d'utiliser un constructeur initialisateur et de rendre les champs avec des valeurs par défaut facultatives :

class Person {
  name?: string = "bob";
  age: number;
  sex: string;
  constructor(opt: Person) {
    Object.assign(this, opt);
  }
} 

ou être explicite sur ce qui est ou n'est pas optionnel pour l'initialisation.

class Person {
  name: string = "bob";
  age: number;
  sex: string;
  constructor(opt: { name?: string, age: number; sex: string; }) {
    Object.assign(this, opt);
  }
}

ou, si vous ne vous souciez pas de ce qui est donné, rendez les champs de l'initialisateur facultatifs :

class Person {
  name: string = "bob";
  age: number;
  sex: string;
  constructor(opt?: Partial<Person>) {
    Object.assign(this, opt);
  }
}

si vous ne vous souciez pas qu'il s'agisse d'une instance de la classe, mais que vous voulez appliquer les champs et les types, alors éviter la coulée et définir explicitement le type de la variable à la place :

var data = {
    "age": 23,
    "sex": "male"
}

var p1:Person = {name:"bob", ... data}; // or
var p2:Person = {new Person(), ... data};

1voto

Eliran Malka Points 6744

Il n'y a aucun moyen de le faire avec Assertions de type (moulage de type) ; ils sont évalués au moment de la compilation, alors que les Valeurs par défaut sont résolus au moment de l'exécution.

Il s'agit de phases totalement disparates.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X