簡體   English   中英

是否有可能(還)返回一個輸入對象,其輸入類型按屬性映射?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM