【发布时间】:2021-02-20 08:37:41
【问题描述】:
我正在使用p-waterfall,我想知道如何使用提供的 TypeScript 类型。这是types。
declare namespace pWaterfall {
type Task<ValueType, ReturnType> = (
previousValue: ValueType
) => ReturnType | PromiseLike<ReturnType>;
type InitialTask<ReturnType> = () => ReturnType | PromiseLike<ReturnType>;
}
declare const pWaterfall: {
<ReturnType>(tasks: [pWaterfall.InitialTask<ReturnType>]): Promise<ReturnType>;
<ValueType1, ReturnType>(
tasks: [
pWaterfall.InitialTask<ValueType1>,
pWaterfall.Task<ValueType1, ReturnType>
]
): Promise<ReturnType>;
<ValueType1, ValueType2, ReturnType>(
tasks: [
pWaterfall.InitialTask<ValueType1>,
pWaterfall.Task<ValueType1, ValueType2>,
pWaterfall.Task<ValueType2, ReturnType>
]
): Promise<ReturnType>;
...
我把example(下面的代码)放在一起,如果输入它真的会帮助我理解如何让类型与p-waterfall一起工作。
import pWaterfall from "p-waterfall";
interface User {
name: string;
}
const getItemsRequest = async (sliceCount: number): Promise<User[]> => {
return [{ name: "a" }, { name: "b" }, { name: "c" }].slice(0, sliceCount);
};
const getNames = (results: User[]): string[] => {
return results.map(item => item.name);
};
const countArrayLength = <T extends unknown[]>(results: T): number => {
return results.length;
};
(async () => {
const transformers = [getItemsRequest, getNames, countArrayLength];
const shouldBeTypeNumberButIsUnknown = await pWaterfall(transformers, 2);
console.log(`results`, shouldBeTypeNumberButIsUnknown); // 2
})();
shouldBeTypeNumberButIsUnknown 未知,但应该是 number,因为传递给 pWaterfall 的最后一个函数返回一个数字。
【问题讨论】:
标签: typescript typescript-typings typescript-generics