115 votes

Comment définir un type d'union littérale de chaîne à partir de constantes dans Typescript

Je sais que je peux définir des types d'union de chaînes pour restreindre les variables à l'une des valeurs de chaîne possibles :

type MyType = 'first' | 'second'
let myVar:MyType = 'first'

J'ai besoin de construire un type comme ça à partir de chaînes constantes, par exemple :

const MY_CONSTANT = 'MY_CONSTANT'
const SOMETHING_ELSE = 'SOMETHING_ELSE'
type MyType = MY_CONSTANT | SOMETHING_ELSE

Mais pour une raison quelconque, cela ne fonctionne pas ; cela dit MY_CONSTANT refers to a value, but it being used as a type here.

Pourquoi Typescript autorise-t-il le premier exemple, mais n'autorise-t-il pas le second cas ? Je suis sur Typescript 3.4.5

21voto

Eugene Points 398

Vous pouvez également utiliser ENUM pour ce cas. Par exemple :

// Define enum.
enum myConstants {
  MY_CONSTANT = 'my_constant',
  SMTH_ELSE = 'smth_else'
}

// Use it in an interface for typechecking.
interface MyInterface {
  myProp: myConstants
}

// Example of correct object - no errors.
let a: MyInterface = {
  myProp: myConstants.MY_CONSTANT
}

// Incorrect value - TS reports an error.
let b: MyInterface = {
  myProp: 'John Doe'
}

En savoir plus sur ENUMS

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