我知道我可以定义字符串联合类型以将变量限制为可能的字符串值之一:
type MyType = 'first' | 'second'
let myVar:MyType = 'first'
我需要根据常量字符串构造类似的类型,例如:
const MY_CONSTANT = 'MY_CONSTANT'
const SOMETHING_ELSE = 'SOMETHING_ELSE'
type MyType = MY_CONSTANT | SOMETHING_ELSE
但是由于某种原因,它不起作用;它说MY_CONSTANT refers to a value, but it being used as a type here
。
为什么Typescript允许第一个示例,但不允许第二种情况?我正在使用Typescript 3.4.5
答案 0 :(得分:6)
在这种情况下,您也可以使用枚举。例如:
// 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'
}
答案 1 :(得分:3)
要获取变量的类型,您需要使用typeof
类型运算符:
const MY_CONSTANT = 'MY_CONSTANT'
const SOMETHING_ELSE = 'SOMETHING_ELSE'
type MyType = typeof MY_CONSTANT | typeof SOMETHING_ELSE