如何解决如何在此打字稿代码中设置默认功能
以下代码运行正常。
function test<T extends object,K extends keyof T,P extends (v: T[K]) => any>(
item: T,key: K,transform: P
): ReturnType<P> {
return transform(item[key])
}
但是当我将默认函数设置为 param transform
时,它会出错
function test<T extends object,transform: P = v => v
): ReturnType<P> {
return transform(item[key])
}
类型 '(v: T[K]) => T[K]' 不能分配给类型 'P'。 '(v: T[K]) => T[K]' 可分配给类型为 'P' 的约束,但可以使用不同的约束子类型 '(v: T[K]) = 实例化 'P' > 任何'。
正常运行它解决方法
没有必要敢于使用类型级计算。编写具体类型就足够了。
type F<X,Y> = (x: X) => Y
function test<T extends object,K extends keyof T>(
item: T,key: K,transform: F<T[K],any> = v => v
): ReturnType<F<T[K],any>> {
return transform(item[key])
}
TypeScript 的推断实际上并不是那么明智。在这种情况下,编译器不能很好地推断类型变量 P
。为此,following code is inferred correctly:
function test2(_: ((x:any) => number) extends ((x:any) => any) ? number : string = 1){
}
关键字 infer
只用于推断类型变量(这可以在 extends
之后使用 ONLY 来输入参数)。
TypeScript 中的类型级计算正在开发中,让我们拭目以待。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。