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 } = {}
