TypeScript函数返回类型为对象属性类型联合时报错原因咨询
问题原因解析
- 你的泛型函数返回类型
T[keyof T]代表传入对象所有属性类型的联合,比如调用get({age:9,name:"Nick"})时,返回类型是number|string,意味着函数可以返回这两个类型中的任意一个。 - 但函数实现里只返回了
x.age(number类型),永远无法返回联合类型里的string(或其他可能的额外属性类型)。TypeScript的类型检查会要求函数返回值必须覆盖返回类型的所有可能情况,这里你的实现做不到,所以抛出类型不匹配的错误。
举个更直观的例子:如果传入的对象是{age:25, name:"Alice", isAdmin:true},此时T[keyof T]是number|string|boolean,但你的函数只能返回number类型的age,完全满足不了返回类型里string和boolean的要求,编译器自然会报错。
至于你用return null as any时不报错,是因为any类型可以绕过TypeScript的类型检查,能被赋值给任意类型;而返回类型的正确推断是基于泛型参数T的,和返回值的具体类型无关。
内容的提问来源于stack exchange,提问作者gmoniava
相关产品推荐
相关产品推荐

