Comme vous l'avez déjà dit, il n'est pas construit dans la fonctionnalité sur la Machine à partir de la version 2.8. Cependant, il ya des façons d'obtenir le même résultat:
Option 1: à l'Aide d'une bibliothèque
ts-nameof est une bibliothèque qui fournit exactement la fonctionnalité comme C#. Avec ce que vous pouvez faire:
nameof(console); // => "console"
nameof(console.log); // => "log"
nameof<MyInterface>(); // => "MyInterface"
nameof<MyNamespace.MyInnerInterface>(); // => "MyInnerInterface"
ts-simple-nameof propose une alternative. Essentiellement, il traite un stringified lambda de comprendre le nom de la propriété:
nameof<Comment>(c => c.user); // => "user"
nameof<Comment>(c => c.user.posts); // => "user.posts"
Option 2: Définir une fonction d'assistance
Vous pouvez facilement définir vos propres nameof
qui ajoute de la vérification de type, cependant il ne sera pas refactoriser automatiquement que vous aurez toujours besoin de taper une chaîne de caractères littérale:
const nameof = <T>(name: keyof T) => name;
Il sera de retour le passé nom de la propriété mais génère une erreur de compilation lorsque le nom de la propriété n'existe pas sur le type T
. L'utiliser comme ceci:
interface Person {
firstName: string;
lastName: string;
}
const personName1 = nameof<Person>("firstName"); // => "firstName"
const personName2 = nameof<Person>("noName"); // => compile time error
Crédits et plus d'informations sur ce
Mise à jour sur la fonction d'assistance avec Tapuscrit de 2,9+
Le type keyof T
maintenant non seulement résout à une chaîne, mais à l' string | number | symbol
(ref). Si vous voulez continuer à résoudre les cordes, l'utilisation de cette mise en place:
const nameof = <T>(name: Extract<keyof T, string>): string => name;