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];
}