75 votes

Est-il possible d'utiliser `keyof` opérateur sur les littéraux au lieu d'interfaces?

J'ai un objet littéral comme suit (toutes les propriétés sont connues au moment de la compilation):

const foo = {
  "hello": "hola"
};

Si foo ont une interface plutôt qu'une variable, j'ai facilement pu faire quelque chose comme

/** THEORETICAL ONLY - Does not compile! */
function translate(input: keyof foo): string {
  return foo[input];
}

Cependant, de le faire avec une variable ne fonctionne pas, car le compilateur ne peut pas trouver une interface avec le nom foo.

Ne Tapuscrit de soutien keyof des opérations sur les objets littéraux dont les valeurs sont connues au moment de la compilation?

184voto

Ryan Cavanaugh Points 17393

keyof fonctionne sur les types, mais foo est une valeur. Mais l' typeof - opérateur prend une valeur et produit son type, de sorte que vous pouvez utiliser keyof typeof foo pour ce faire.

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