typescript - 使用参数其中 Fn 扩展了一个函数类型
问题描述
这与我在使用 Redux Saga 生成器时遇到的问题有关。他们的定义之一call
是(不包括实现):
// this is taken from redux saga and cannot be changed
function call<Fn extends (...args: any[]) => any>(
fn: Fn,
...args: Parameters<Fn>
): CallEffect<SagaReturnType<Fn>> { ... }
我试图这样称呼它:
function test<F extends (a: string, b: number) => any>(f: F) {
return call(f, 'a', 0)
}
此时我收到错误消息:'["a", 0]' 类型的参数不可分配给'Parameters<F>' 类型的参数。
但是如果F
extends (a: string, b: number) => any
,那不应该是可分配的吗?
解决方案
诸如Prameters
一般情况下的条件类型不能很好地与未解析的泛型类型一起使用。由于类型不确定,打字稿通常不会评估条件类型。
您可以使用稍微不同的签名来解决它call
:
function call<A extends any[], R>(
fn: (...a: A) => R,
...args: A
): void {}
function test<F extends (a: string, b: number) => any>(f: F): void {
call(f, 'a', 0)
}
推荐阅读
- sql-server - 来自同一个表的多个插入,但第二个插入需要来自第一个插入的标识
- javascript - 从 Nodejs express 应用程序发布到 MySQL 数据库返回 404
- laravel - 在 Dusk 测试中,日期字段始终采用美国格式
- c++ - 什么时候可以在 C++ 中意外更改变量的值?
- reactjs - 与 Gatsby 和 Bulma 反应 - 列不水平
- xamarin.forms - 将 TextField 绑定到 Xamarin.Forms 中的 Int 属性
- pandas - 如何查找列连续月数为 6 的索引?
- html - 位置:修复了 Safari 与 Chrome 处理方式不同的问题
- javascript - 旋转时将元素指向圆心(CSS / JS)
- asp.net - 如何将 SQL 获取到数据传输对象?