无法区分打字稿中循环内的变量类型

时间:2019-03-22 14:58:43

标签: typescript loops union union-types

我试图声明一个列表,该列表可以一次充满'a'类型的数据,也可以一次充满'b'类型。我理解为什么打字稿在这里给出错误,它不知道循环内的temp变量内的用户数据成员是'a'还是'b'类型。我不明白的是如何解决它。我想要一次可以同时充满一种或另一种数据的数组。

错误:'a |类型的参数b'不可分配给'b'类型的参数。   类型'a'中缺少属性'extra_porperty',但类型'b'中必需。

interface a {
  id: number;
  first_name: string;
  last_name: string;
}

interface b extends a {
  extra_porperty: string;
}

interface c {
  user: a | b;
}

const newList: c[] = [];
const tempList: a[] | b[] = [];
newList.forEach((temp: c) => tempList.push(temp.user));

2 个答案:

答案 0 :(得分:0)

您所做的是断言tempLista的数组还是b的数组。 这意味着整个列表必须都是相同的类型。

您需要做的是将tempList定义为这两种类型之一的数组

const tempList: (a | b)[] = [];

这将允许将ab类型的元素放置在数组中。

在游乐场here中查看工作示例。

答案 1 :(得分:0)

您还可以使用'?'设置可选参数:

interface a {
  id: number;
  first_name: string;
  last_name: string;
}

interface b extends a {
  extra_porperty?: string;
}

interface c {
  user: a | b;
}

const newList: c[] = [];
const tempList: a[] | b[] = [];
newList.forEach((temp: c) => tempList.push(temp.user));