Sans connaître votre cas d'utilisation exact, il est difficile de vous donner une réponse concrète. Mais je vais essayer :)
Puisque les annotations de type TypeScript ne sont disponibles que pendant la compilation et non pendant l'exécution, il n'y a plus vraiment de différence entre les propriétés à la compilation. Par exemple:
class Person {
private secret = '123';
constructor(
public readonly firstName: string,
public readonly lastName: string,
public readonly id: number
) { }
}
seront compilés à
var Person = (function() {
function Person(firstName, lastName, id) {
this.firstName = firstName;
this.lastName = lastName;
this.id = id;
this.secret = '123';
}
return Person;
}());
De plus, alors que type PersonProperties = keyof Person
vous donnera une chaîne de type littérale de toutes les propriétés publiques, vous ne pouvez pas utiliser ce type de filtrer quoi que ce soit, parce qu'il est seulement une annotation. Vous ne pouvez donc utiliser que PersonProperties
pour les signatures de fonction.
Supposons que vous puissiez utiliser Reflect
, mais cela inclut le codage en dur des propriétés publiques. En outre, le compilateur d'Angular abuse du compilateur TS pour écrire des métadonnées disponibles pendant la compilation. Je ne sais pas s'il y a un framework agnostique lib qui fait la même chose.
Merci pour la réponse, même si j'espérais que cela puisse être fait sans instancier l'objet. – user3284063