输入'string |数字”不可分配给“字符串”类型

时间:2019-07-11 21:30:07

标签: typescript

我遇到一个问题,我有一个interface描述了一些动态数据,其中每个属性的值可以是许多类型之一,但是我不能分配一个属于这些类型的变量类型。

这是我的interface

interface MyDict {
  [key: string]: string | number;
}

以下是该类型的数据:

const data: MyDict = {
  hello: 'world',
  test: 123,
};

但是,当我尝试从data中提取值并将其分配给类型为stringnumber的变量时,它将失败。

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可以是stringnumber,在这种情况下,它可以是string,但是当我尝试将其分配给变量{{ 1}}只能是example,它意外失败。我的印象是可以将string视为“或”,但也许我错了。关于工会类型,我缺少什么吗?我真的很感谢一些指示! :)

编辑:我可以通过将|转换为字符串来使其工作,就像这样:

data.hello

这是正确的解决方案,还是这种用例有更好的做法?

2 个答案:

答案 0 :(得分:0)

我认为这样会更好:

const example: keyof MyDict = data.test;

答案 1 :(得分:0)

解决此问题的正确方法是在代码中键入check。例如:

if (typeof data.hello === 'string') {
  const whatever: string = data.hello;
}

编译器将data.hello视为两种可能的类型,因此,如果要声明具有单个类型的变量,则必须首先排除另一种可能性。