[英]Cannot define string enum typescript as string is not assignable
enum Cat {
cat1 = 'cat1',
cat2 = 'cat2',
cat3 = 'cat3',
cat4 = 'cat4',
cat5 = 'cat5'
}
const category: Cat = 'cat' + cat
为什么我会收到 typescript 错误? cat
是一个数字,所以category
是一个字符串。 但我想为这个变量定义一些特定的字符串值。
Type 'string' is not assignable to type 'Cat'.
我假设您希望类别成为 Cat 之一,而不是枚举本身。 所以
const cat = 4;
const category = Cat[`cat${cat}`] // category: Cat.cat4
如果尝试访问超出范围的数字,这也可以为您提供类型安全。 操场
enum Cat {
cat1 = 'cat1',
cat2 = 'cat2',
cat3 = 'cat3',
cat4 = 'cat4',
cat5 = 'cat5'
}
const cat = 4;
const category = Cat[`cat${cat}`]
const cat6 = 6;
const category6 = Cat[`cat${cat6}`] // Property 'cat6' does not exist on type 'typeof Cat'.
Typescript 不能确保cat
是1,2,3,4, or 5
因为它也可能是someThingElse
。 因此,您必须告诉 typescript 您确定它是Cat
类型
这里的问题是编译器不允许将'cat' + someVar
用作类型Cat
。
使用它时请小心,因为您实际上会覆盖编译器错误。 您确实需要确保您之前所做的任何事情都将永远是一只有效的猫。
enum Cat {
cat1 = 'cat1',
cat2 = 'cat2',
cat3 = 'cat3',
cat4 = 'cat4',
cat5 = 'cat5',
}
const category: Cat = (('cat' + cat) as Cat);
enum Cat {
cat1 = 'cat1',
cat2 = 'cat2',
cat3 = 'cat3',
cat4 = 'cat4',
cat5 = 'cat5',
}
// this would be of however [Cat.cat1, Cat.cat2 ...] would be a lot safer.
// I would generally suggest not tot use dynamic enum values like this.
for (const i of [1,2,3,4,5]) {
const category: Cat = (('cat' + i) as Cat);
}
// the compiler would allow this as well, since you ensure that you know the type is going to be if type Cat
for (const i of ['dog']) {
const category: Cat = (('cat' + i) as Cat);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.