对象和原始值之间的类型声明失败

时间:2019-03-22 21:43:15

标签: angular typescript type-assertion

我已经创建了这个界面。

interface Option {
  value: string|number;
  label: string|number;
}

我打算创建一个名为options的变量,该变量允许使用“ Option”数组或单个值(例如字符串)。

为变量赋值没有任何问题。

const options: Array<Option|string> = [{value: 'a', label: 'A'}];

但是当我尝试使用该变量时,出现以下错误:

const singleOption = options[0].value;
  

类型'string |中不存在属性'value'选项'。属性“值”在类型“字符串”上不存在

我尝试验证该值是对象还是字符串。

const singleOption = typeof options[0] !== 'string' ? options[0].value : options[0];

以及类型声明,但是我仍然遇到相同的错误。

 const singleOption = (<Option>options[0]).value ? options[0].value : options[0];

我进行了一些研究,但没有找到针对这种情况的解决方案或解决方法。

1 个答案:

答案 0 :(得分:3)

不幸的是,这样的控制流不适用于数组访问。如果先将选项分配给变量,它将起作用:

const option = options[0]
const singleOption = typeof option !== 'string' ? option.value : option;