我试图在TypeScript中定义一个泛型类,其中泛型参数是从另一个类型扩展的。但TS似乎无法从嵌套扩展中正确推断财产。
下面是突出问题的示例代码。
type Instance = { id: number };
type IsRelationKey<T, K extends keyof T> = T[K] extends Instance[] | Instance | null | undefined ? K : never;
type Attributes = {
foo?: Instance;
};
class GenericManager<TAttributes extends Attributes> {
func(): IsRelationKey<Attributes, 'foo'> {
return 'foo';
}
genericFunc(): IsRelationKey<TAttributes, 'foo'> {
return 'foo';
}
}
const manager = new GenericManager<Attributes>();
manager.genericFunc();
以下是TS操场上的示例代码:TypeScript操场
在GenericManager中,IsRelationKey<Attributes, 'foo'>正确推断了输出类型,但IsRelationKey<TAttributes, 'foo'>未能做到这一点,尽管TAttributes扩展了Attributes。奇怪的是,对实例(manager.genericFunc();)的方法调用正确地显示了输出类型,但编译失败。知道我如何解决这个问题吗?