繁体   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