类型字符串不可分配给类型

时间:2019-07-25 17:36:22

标签: reactjs typescript

我试图创建一个只能有两个值的常量,如代码所示。并且state.langen一样是类型安全的| 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"'

的错误

如何解决此错误?

1 个答案:

答案 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 ; 而忘记在任何地方处理它。但是,有时候,字符串就足够了。由您决定。