【发布时间】:2020-01-11 00:02:45
【问题描述】:
我有下面这个简单的例子说明K extends keyof T是在哪里声明的,但是为findMember推断的返回类型的结果是不同的,我真的不明白为什么会有这样的差异。
我还创建了一个指向 TypeScript Playground HERE的链接
class Group1<T> {
findMember<K extends keyof T = keyof T>(name: K): T[K] {
return {} as T[K];
}
}
class Group2<T, K extends keyof T = keyof T> {
findMember(name: K): T[K] {
return {} as T[K];
}
}
interface Person {
firstName: string;
lastName: string;
age: number;
addresses: Array<{
street: string;
city: string;
zip: string;
}>
}
const group1 = new Group1<Person>();
// Inferred type is Array<{ street: string; city: string; zip: string; }>;
const addresses1 = group1.findMember('addresses');
const group2 = new Group2<Person>();
// Inferred type is string | number | Array<{ street: string; city: string; zip: string; }>;
const addresses2 = group2.findMember('addresses');
【问题讨论】:
标签: typescript type-inference keyof