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