我有一個函式,它接受一個鍵、一個物件,并在所述物件中回傳該鍵的值。如果是字串聯合,我希望物件包含該聯合的所有成員作為鍵。
該函式當前如下所示:
const getValue = <T extends string>(key: T) => <O extends { [key in T]: unknown }>(obj: O): O[T] => {
return obj[key];
};
當給定一個已定義鍵的字串聯合時,此函式按預期作業:
const key = "A" as "A" | "B" | "C";
// Correctly typed as number | boolean
const value = getValue(key)({
A: 2,
B: 1,
C: true
});
但是,我希望這個函式也能優雅地處理string,在這種情況下應該添加undefined一個可能的回傳型別,即
// Value should be number | boolean | undefined, but is unknown
const otherValue = getValue(key as string)({
A: 2,
B: 1,
C: true
});
我嘗試過各種解決方案,包括infer使用方法,但到目前為止還沒有找到解決方案。我在 TypeScript 中尋找的可能嗎?
感謝您抽出寶貴時間提供幫助!
為方便起見,這里有一個帶有上述代碼的 TypeScript Playground 鏈接。
uj5u.com熱心網友回復:
我們只需要更改回傳型別以涵蓋特定情況下T是廣泛string型別:
string extends T ? O[keyof O] | undefined : O[T]
如果是string,那么我們得到 的所有值O并添加undefined。
看起來不錯!
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/524772.html
標籤:打字稿打字稿泛型
上一篇:在反應中制作動態頁面
下一篇:編譯器API打字稿。多行命名匯入
