gpt4 book ai didi

Typescript 通用数组类型和推送项

转载 作者:搜寻专家 更新时间:2023-10-30 21:07:53 24 4
gpt4 key购买 nike

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

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);
}

}

DEMO1 DEMO2

错误: arr.push(a) -> 'A | 类型的参数B' 不可分配给类型为“A & B”的参数。 类型“B”不可分配给类型“A & B”。 属性“abc”在类型“B”中缺失,但在类型“A”中是必需的。

目前的解决方案: (arr as typeof a[]).push(a);

最佳答案

你不能推 A | BA[] | B[] 仅当 a 是 typeof Barr typeof A[] 因为类型 B 缺少 abc 属性。

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

arr.push(a as A);
(arr as B[]).push(a as B);
(arr as B[]).push(a as A);

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

Playground

关于Typescript 通用数组类型和推送项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54627951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com