Typescript 为什么在一般定义的返回类型上需要强制转换?

Typescript 为什么在一般定义的返回类型上需要强制转换?,typescript,Typescript,给定这个非常简单的属性访问函数 export function accessProperty<T, K extends keyof T, P extends T[K]>(name: K, v: T): P { return v[name] as P } 但是所有这些都需要强制转换泛型的定义方式每个p都是T[K],但不一定每个T[K]都是p。您可以直接使用T[K]解决此问题 即 导出函数accessProperty(名称:K,v:T):T[K]{ 返回v[名称]; } ex

给定这个非常简单的属性访问函数

export function accessProperty<T, K extends keyof T, P extends T[K]>(name: K, v: T): P {
    return v[name] as P
}

但是所有这些都需要强制转换泛型的定义方式每个
p
都是
T[K]
,但不一定每个
T[K]
都是
p
。您可以直接使用
T[K]
解决此问题

导出函数accessProperty(名称:K,v:T):T[K]{ 返回v[名称]; }
export function accessProperty<T, K extends keyof T, P = T[K]>(name: K, v: T): P 
export function accessProperty<T, K extends keyof T, P extends T[K] = T[K]>(name: K, v: T): P 
export function accessProperty<T, K extends keyof T>(name: K, v: T): T[K] {
    return v[name];
}