我试图创建一个通用函数来处理各种类型的数组(仅共享一些共同的属性),并执行简单的操作,例如删除或添加项目。打字应该如何寻找这样的功能?
<ul id="videos"></ul>
<ul id="result"></ul>
错误: interface A {
value: number;
aasdsad?: number;
abc: string;
}
interface B {
value: number;
asdsad1?: string;
}
export class Main {
public getOneOfTheArrays(): A[] | B[] {
return []; // return A[] or B[] depending on certain conditions
}
public getValue(index: number) {
const arr: A[] | B[] = this.getOneOfTheArrays();
const a = this.copy(arr[index]);
a.value = 1234;
arr.push(a); // <- typing's error here
}
public copy(obj: A | B): A | B {
return Object.assign({}, obj);
}
}
->类型'A | B'不可分配给'A&B'类型的参数。
类型“ B”不可分配给类型“ A&B”。
属性“ abc”在类型“ B”中丢失,但在类型“ A”中是必需的。
到目前为止的解决方案: arr.push(a)
答案 0 :(得分:3)
仅当A | B
的类型为A[] | B[]
和a
的类型为B
时,才能将arr
推到A[]
,因为类型为{{1} }缺少B
属性。
您可以在以下情况下推动它:
abc
您必须以某种方式检查我a是B而arr是A [],并且在这种情况下需要应用一些不同的逻辑。