gpt4 book ai didi

javascript - 数组的 typescript 泛型

转载 作者:行者123 更新时间:2023-12-04 12:36:30 26 4
gpt4 key购买 nike

我需要扩展一个从我的类(class)扩展的通用数组列表。
如何正确地做到这一点?

export interface DeliveryMethod {
readonly id: string;
readonly company: string;
readonly cost: number;
readonly threshold: number;
readonly intervals: Array<Interval>;
readonly paymentMethods: Array<PaymentMethod>;
}

export interface Delivery {
selected: SelectedDelivery;
available: { [key : string] : Array<T extends DeliveryMethod>};
}
找不到名称“T”.ts(2304)
available: { [key : string] : Array<T extends DeliveryMethod>};
例如我需要这样的东西:
const Delivery = {
selected :{/*data inside*/},
available:{
pickup: [<Pickup>{},<Pickup>{}],
courier: [<Courier>{},<Courier>{}]
}
}

最佳答案

@aopanasenko 的答案很好。我想完成它添加一种解决多规范问题的方法。

如果 available 的属性不多,而且它们是固定和稳定的,那么您可以考虑将它们全部列在 Delivery 中。界面:

interface Delivery<T extends DeliveryMethod, U extends DeliveryMethod> {
available: { [key : string] : Array<T | U>};
};

然后你可以定义 delivery像这样的对象:
const delivery: Delivery<Pickup, Courier>

如果您不知道先验属性,那么您需要一种将属性名称链接到 TypeScript 类型的方法,例如我添加了一个 available仅用于映射的对象:
interface Delivery {
available: { [key: string]: Array<DeliveryMethod> | null };
};

const delivery: Delivery = {
available: {}
}

const available: {
pickup: Pickup[] | null,
courier: Courier[] | null
} = {
pickup: null,
courier: null
};

delivery.available = { ...delivery.available, ...available };

通过这种方式,它得到了正确的类型检查。我还添加了 | null为了提供示例,您可以将其删除。

关于javascript - 数组的 typescript 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61200999/

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