[英]Is it possible (yet) to return an input object with its types mapped per property?
簡而言之,我想要一個采用非預定義類型的函數,如下所示:
{
name: string,
list: Array,
metadata: Object,
}
並返回這個
{
name: MyStringProxy,
list: MyArrayProxy,
metadata: MyObjectProxy,
}
我知道如何在每個屬性具有相同類型的情況下返回對象( 與打字稿中的另一個對象具有相同鍵的對象? )...
abstract function allPropsAre42<TYPE_IN>(obj: TYPE_IN): { [key in keyof TYPE_IN]: 42 };
...這是一個很好的起點,但是它僅將所有內容映射到一種類型。 我想將每種類型映射到另一種。
我很確定這是不可能的,但是這里有一些偽代碼,就像我要尋找的一樣:
interface IPropMap {
string: MyStringProxy,
Array: MyListProxy,
Object: MyObjectProxy,
}
// not real code
abstract function mapAllProps<TYPE_IN>(obj: TYPE_IN): {
[key in keyof TYPE_IN]: IPropMap[TYPE_IN[key]]
};
可以在打字稿中做這樣的事情嗎?
https://www.typescriptlang.org/docs/handbook/advanced-types.html#conditional-types
弄清楚了。 使用條件類型映射,可以做到這一點:
type TypeName<T> =
T extends string ? MyStringProxy :
T extends Array ? MyArrayProxy :
T extends object ? MyObjectProxy :
undefined;
abstract function mapAllProps<TYPE_IN>(obj: TYPE_IN): {
[key in keyof TYPE_IN]: TypeName[TYPE_IN[key]]
};
我的猜測距離還不太遠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.