TypeScript:如何使用索引签名初始化具有动态键的对象?
是否有可能简化以下内容,以便当我有一种新产品类型时,我不需要为新产品类型添加另一行代码来初始化它?如果我不初始化变量,就会有语法错误。
enum ProductType {
PC = 'pc',
LAPTOP = 'laptop',
TV = 'tv'
}
let productList: { [key in ProductType]: Product[] | undefined } = {
[ProductType.PC]: undefined,
[ProductType.LAPTOP]: undefined,
[ProductType.TV]: undefined
}
答案#1
如果我理解正确,你想要避免在初始化对象中为每个新的 ProductType 添加新行,这里有一个可能的解决方案。通过将枚举的键归约为一个对象,使其更加动态。
enum ProductType {
PC = 'pc',
Laptop = 'laptop',
}
const o = Object.values(ProductType).reduce(
(acc, key) => ({
...acc,
[key]: undefined,
}),
{} as Record<ProductType, undefined>
);
// const o = { pc: undefined, laptop: undefined };
答案#2
我按照VLAZ的建议编写了代码
let productList: { [key in ProductType]?: UserProduct[] | undefined } = {}
