Je sais que je peux définir des types d'union de chaîne 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; ça dit MY_CONSTANT refers to a value, but it being used as a type here
.
Pourquoi TypeScript autorise le premier exemple, mais n'autorise pas le second cas? Je suis sur TypeScript 3.4.5
@ La réponse de Titian n'est pas correcte. typeof
renverra toujours un string
. Il n'y aura pas de véritable vérification de type.
Je propose d'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'
}