Typescript 类型脚本通用联合

Typescript 类型脚本通用联合,typescript,typescript-typings,typescript-generics,Typescript,Typescript Typings,Typescript Generics,所以我有一个泛型对象数组,我想迭代这个数组,但是类型脚本不允许。下面是一些示例代码。关于如何解决这一问题的任何建议 type someGeneric<T> = { item: T }; type stringGeneric = someGeneric<string>; type numberGeneric = someGeneric<number>; type someFunction = <T>(generic: someGeneric&l

所以我有一个泛型对象数组,我想迭代这个数组,但是类型脚本不允许。下面是一些示例代码。关于如何解决这一问题的任何建议

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

type stringGeneric = someGeneric<string>;

type numberGeneric = someGeneric<number>;

type someFunction = <T>(generic: someGeneric<T>) => T;

const someFunction: someFunction = (generic) => generic.item;

const stringGeneric: stringGeneric = { item: 'some String' },
    numberGeneric: numberGeneric = { item: 12 };

let genericArray = [stringGeneric, numberGeneric];
genericArray.forEach(generic => {
    someFunction(generic); // Error On This line.
});
type someGeneric={item:T};
类型stringGeneric=someGeneric;
类型numberGeneric=someGeneric;
输入someFunction=(泛型:someGeneric)=>T;
const someFunction:someFunction=(generic)=>generic.item;
const stringGeneric:stringGeneric={item:'some String'},
numberGeneric:numberGeneric={item:12};
设genericArray=[stringGeneric,numberGeneric];
genericArray.forEach(generic=>{
someFunction(generic);//此行出错。
});

您只需将代码复制粘贴到。我似乎无法共享代码。

问题是,如果我们尝试传入类型为
someGeneric
的参数,函数会接受类型为
someGeneric的参数| someGeneric
typescript不会尝试由此推断
T
,它只会说联合与类型
someGeneric
不兼容


我们可以更改函数的定义,以便类型参数扩展
someGeneric

“这一行上的错误”错误是什么?@MTCoster错误(无论如何重要的部分)是
类型为'someGeneric | someGeneric'的参数不能分配给类型为'someGeneric'的参数。
主题外,但是我可以建议对类型名称始终使用TitleCase吗。e、 g.某种泛型。这与TS社区和TS团队的代码相匹配。
type someGeneric<T> = { item: T };

type stringGeneric = someGeneric<string>;

type numberGeneric = someGeneric<number>;

type extractItemFromSomeGeneric<T extends someGeneric<any>> = T extends someGeneric<infer U> ? U : never;  
type someFunction = <T extends someGeneric<any>>(generic: T) => extractItemFromSomeGeneric<T>;

const someFunction: someFunction = (generic) => generic.item;

const stringGeneric: stringGeneric = { item: 'some String' },
    numberGeneric: numberGeneric = { item: 12 };

let someGeneric = [stringGeneric, numberGeneric];
someGeneric.forEach(generic => {
    someFunction(generic); // retruns string | number
});