簡體   English   中英

Typescript從實現中推斷通用類型

[英]Typescript infer Generic types from Implementation

所以我正在做一個本機反應項目。 我希望有人能從實現中推斷出泛型類型。

type itemType<T> = { item: T };

const someItem = {
    item: 'Some String'
};

type someItemType = typeof someItem;
// So Here someItemType will be {item: string}, i want it to be itemType<string> and 
// in this example i have implemented itemType but in real use case i want to infer 
//it from the actual implementation  

目前,打字稿中不支持對變量的部分推斷。 您唯一的選擇是使用函數的推斷行為:

type itemType<T> = { item: T };
const createItemType = <T>(o: itemType<T>) => o;

const someItem = createItemType({ //someItem is typed as itemType<string>
    item: 'Some String'
})

僅需注意一點,在原始示例中將someItem鍵入為{item: string},可能並不重要,因為typescript使用結構兼容性來確定可分配性{item: string},因此仍可以將其分配給itemType<string> 因此,如果結構兼容,就可以了:

type itemType<T> = { item: T };

const someItem ={ 
    item: 'Some String'
}
const someOtherItem: itemType<string> = someItem // ok

類型定義為{ item: string }還是itemType<string>因為TypeScript使用結構化類型。 這意味着兩者是相同的,因為它們具有相同的結構。

例如,您可以將任一類型的值分配給其他類型:

type itemType<T> = { item: T };

const someItem = {
    item: 'Some String'
};

type someItemType = typeof someItem;

const a: itemType<string> = { item: 'exmaple a' };
const b: someItemType = { item: 'exmaple b' };

let c: itemType<string>;

c = a;
c = b;

let d: someItemType;

d = a;
d = b;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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