打字稿通用数组类型和推送项目

时间:2019-02-11 09:59:56

标签: typescript typescript-typings

我试图创建一个通用函数来处理各种类型的数组(仅共享一些共同的属性),并执行简单的操作,例如删除或添加项目。打字应该如何寻找这样的功能?

<ul id="videos"></ul>
<ul id="result"></ul>

DEMO1 DEMO2

错误: 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)

1 个答案:

答案 0 :(得分:3)

仅当A | B的类型为A[] | B[]a的类型为B时,才能将arr推到A[],因为类型为{{1} }缺少B属性。

您可以在以下情况下推动它:

abc

您必须以某种方式检查我a是B而arr是A [],并且在这种情况下需要应用一些不同的逻辑。

Playground