使用泛型为异步队列提供任务类型

时间:2018-06-25 21:51:05

标签: typescript async.js tsc

我现在有这个:

export type EVCb = (err:any, val?:any) => void;
export type Task = (cb: EVCb) => void;
export const q = async.queue((task: Task, cb) => task(cb), 2);

是否没有办法使用泛型提供有关任务的async.queue类型信息?

类似这样的东西:

export const q = async.queue<Task>((task: Task, cb) => task(cb), 2);

我不知道这是正确的方法还是正确的语法。

1 个答案:

答案 0 :(得分:4)

mysql.format(`SELECT * FROM employees WHERE ${isAlwaystrue ? 1 : 'emp_no = 1'}`); 的类型定义需要2-3个类型参数。在具有2个参数的版本中,第一个参数是任务类型,第二个参数是回调。我的猜测是,这些类型定义是在条件类型可用于从任务中提取回调类型之前编写的(或者维护者不希望使用条件类型来维护与async之后的版本的兼容性)。

您可以传入第二个参数:

2.8

修改

我们还可以添加一个新的export const q2 = async.queue<Task, EVCb>((task, cb) => task(cb), 2); 方法作为模块扩充,该方法只需要一个参数,因为自打字稿2.8起,现在可以从其他类型中提取类型参数了(这可能对定义(如果有人愿意这样做):

async