function extractIdFromObject<T extends { id: U }, U>(item: T) {
return item.id;
}
const x = extractIdFromObject({ id: 1 });
const y = extractIdFromObject({ id: "1" });
const z = extractIdFromObject({ id: {} });
我编写了上面的函数,它给出了一个具有属性id
的对象,它将返回id
的值。
虽然以上操作会运行得很好,但TS引擎会将x
,y
和z
推断为{}
。
为了获得U
(item.id
)的正确类型信息,我如何更改类型?
答案 0 :(得分:2)
使用Typescript来推断一个基于另一个类型参数的类型参数通常不起作用。在这种情况下,最简单的解决方案是使用类型查询。
function extractIdFromObject<T extends { id: any }>(item: T): T['id']{
return item.id;
}
const x = extractIdFromObject({ id: 1 });
const y = extractIdFromObject({ id: "1" });
const z = extractIdFromObject({ id: {} });