我试图声明一个列表,该列表可以一次充满'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));
答案 0 :(得分:0)
您所做的是断言tempList
是a
的数组还是b
的数组。
这意味着整个列表必须都是相同的类型。
您需要做的是将tempList
定义为这两种类型之一的数组
const tempList: (a | b)[] = [];
这将允许将a
或b
类型的元素放置在数组中。
在游乐场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));