【发布时间】:2019-04-20 22:17:33
【问题描述】:
通过使用TypeScript,任何使用sequentially的人都应该被强制传递1到N个参数,输入Promise<T>等于输出[Promise<T>,..
[不工作]我在以下列方式重载第一个声明时遇到 tslint 错误:
重载签名与函数实现不兼容。 ts(2394)
promise.ts
function sequentially<T1>(promiseWrappers: [
() => Promise<T1>
]): Promise<[T1]>;
async function sequentially<T1, T2>(promiseWrappers: [
() => Promise<T1>,
() => Promise<T2>
]): Promise<[T1, T2]> {
const resolved = [];
for (const wrapper of promiseWrappers) {
resolved.push(await wrapper());
}
// @ts-ignore
return resolved;
}
[Working]似乎唯一可行的方法是使用.js 和单独的声明文件.d.ts 编写实现,如下所示:
promise.js
export async function sequentially(promiseWrappers) {
const resolved = [];
for (const wrapper of promiseWrappers) {
resolved.push(await wrapper());
}
return resolved;
}
promise.d.ts
export declare function sequentially<T1, T2>(promiseWrappers: [
() => Promise<T1>,
() => Promise<T2>
]): Promise<[T1, T2]>;
export declare function sequentially<T1, T2, T3>(promiseWrappers: [
() => Promise<T1>,
() => Promise<T2>,
() => Promise<T3>
]): Promise<[T1, T2, T3]>;
如何解决第一个 TS 实现案例?
【问题讨论】:
标签: typescript