我试图创建一个只能有两个值的常量,如代码所示。并且state.lang
和en
一样是类型安全的| ar
。
const keyname: 'owner_name_en' | 'owner_name_ar' = 'owner_name_' + state.lang;
我遇到类似Type 'string' is not assignable to type '"owner_name_en" | "owner_name_ar"'
如何解决此错误?
答案 0 :(得分:3)
原因是您要声明新的内联类型(作为字符串枚举),其唯一可能的值为'owner_name_en' | 'owner_name_ar'
(和null
)。
等效于
type OwnerNameLang = 'owner_name_en' | 'owner_name_ar';
const keyname: OwnerNameLang = 'owner_name_' + state.lang;
现在,您不能以这种方式串联不同的类型
const str: "hello" = "hel" + "lo"
希望获得唯一的可能值是null
和"hello"
的未命名的内联类型(因为赋值的右侧也是两个{{1} })。
您需要使用type assertion,例如
<string>
在这一点上,最好使用具有多个可分解属性的对象(这样,您只能将en / ar存储为字符串枚举,并以其他方式生成该字符串)。但是,在不了解此字符串的用途的情况下,很难提出更好的替代方法。
我要补充一点,我是类型安全的坚定支持者,这在很大程度上是因为它可以帮助开发人员注意到,有一天他们发现新的type OwnerNameLang = 'owner_name_en' | 'owner_name_ar';
const keyname: OwnerNameLang = ('owner_name_' + state.lang) as OwnerNameLang ;
而忘记在任何地方处理它。但是,有时候,字符串就足够了。由您决定。