typescript - 打字稿泛型类型未知参数计数
问题描述
我正在尝试使用泛型类型创建一个函数,该函数接受一个函数、一个其参数数组,然后将它们应用于它,但 typescript 不能正确解释 args 类型
const animate = async <P, A>(
action: (payload: P) => any,
algorithm: (...args: A[]) => P[],
args: A[]
) => {
if (state.playing) return;
dispatch(togglePlaying());
const sequence = algorithm(...args);
for (let element of sequence) {
await delay(1);
dispatch(action(element));
}
dispatch(togglePlaying());
};
这是我尝试使用它时遇到的错误
'(rows: number, cols: number, startCell: Coordinates, endCell: Coordinates) => GridT[]' 类型的参数不能分配给 '(...args: (number | Coordinates)[]) = > 网格[]'
解决方案
您需要的是Parameters<Type>
类型:https ://www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype
从函数类型 Type 的参数中使用的类型构造元组类型。
然后,您可以像这样定义您的函数:
const animate = async <P, F extends (...args: any[]) => P[]>(
action: (payload: P) => any,
algorithm: F,
args: Parameters<F>
) => {
// blah
}
正如您的错误消息所示,如果您定义algorithm
as的类型(...args: A[]) => P[]
,您实际上是在说每个参数都是相同的类型(在您的情况下number | Coordinates
),所以当您尝试传入一个类型的函数时(rows: number, cols: number, startCell: Coordinates, endCell: Coordinates) => GridT[]
它不匹配。
推荐阅读
- regex - 获取全范围文本到字符串
- c++ - 具有自定义标量类型的特征:具有自定义类型的矩阵乘法失败,“使用重载运算符“*”不明确”
- javascript - 使用 css 和 javascript 操作属性
- angular - 默认显示排序图标 - ngx-datatable-column
- c# - Xamarin.android 中的 android Button 上的自定义 Button 类
- python-3.x - python pb3序列化使用pb3
- java - 从 jar 文件运行 python 脚本
- python - 如何用 matplotlib 制作 3d 曲面图,Z 不是由 func 计算的?
- flutter - Flutter:如何将可访问性焦点集中到自定义应用栏
- node.js - 在 JSDOM 中扩展元素方法