我遇到一个问题,我有一个interface
描述了一些动态数据,其中每个属性的值可以是许多类型之一,但是我不能分配一个属于这些类型的变量类型。
这是我的interface
:
interface MyDict {
[key: string]: string | number;
}
以下是该类型的数据:
const data: MyDict = {
hello: 'world',
test: 123,
};
但是,当我尝试从data
中提取值并将其分配给类型为string
或number
的变量时,它将失败。
const example: string = data.hello;
/* ->
Type 'string | number' is not assignable to type 'string'.
Type 'number' is not assignable to type 'string'. ts(2322)
*/
data.hello
可以是string
或number
,在这种情况下,它可以是string
,但是当我尝试将其分配给变量{{ 1}}只能是example
,它意外失败。我的印象是可以将string
视为“或”,但也许我错了。关于工会类型,我缺少什么吗?我真的很感谢一些指示! :)
编辑:我可以通过将|
转换为字符串来使其工作,就像这样:
data.hello
这是正确的解决方案,还是这种用例有更好的做法?
答案 0 :(得分:0)
我认为这样会更好:
const example: keyof MyDict = data.test;
答案 1 :(得分:0)
解决此问题的正确方法是在代码中键入check。例如:
if (typeof data.hello === 'string') {
const whatever: string = data.hello;
}
编译器将data.hello
视为两种可能的类型,因此,如果要声明具有单个类型的变量,则必须首先排除另一种可能性。