[英]Use keys of an object as union-type
我有一個對象(讓它被凍結,這樣打字稿可以更好地處理它的鍵):
const obj = Object.freeze({
'hello': 64,
'world': 20
}) as {[key: string]: number};
現在我有一個功能,用戶可以通過他們的鍵選擇值:
const pick = (keys: Array<string>): Array<number> => {
const values = [];
for (const key of keys) {
// Check if object contains property-key
if (!(key in obj)) {
throw new Error(`There's no such key: ${key}`);
}
values.push(obj[key]);
}
return values;
};
到目前為止看起來不錯,並且在運行時運行時完美無缺,我檢查用戶是否傳遞了任何無效密鑰。 但是我怎么能告訴 TS 只能使用來自obj
鍵呢?
我可以做Array<'hello' | 'world'>
Array<'hello' | 'world'>
但我每次向obj
添加新屬性時都需要更新它,這有點煩人。
相關問題,但它們似乎都使用類型,而我只有一個對象(如果有幫助,可以將其凍結):
type
而我正試圖從我的對象中構建一個類型)const obj = Object.freeze({
'hello': 64,
'world': 20
});
const pick = (keys: Array<keyof typeof obj>) {...}
如您所見,我已將其刪除as {[key: string]: number};
因為它正在擴大類型,您希望它嚴格。
接下來是Array<keyof typeof obj>
我在這里聲明我只接受來自obj
類型的鍵數組作為參數。
Array<keyof typeof obj>
動態計算為("hello" | "world")[]
,幸運的是它會反映原始obj
每一個變化
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.