如何使用 "p-waterfall" TypeScript 类型
How to use "p-waterfall" TypeScript Types
我正在使用 p-waterfall and I would like to know how to use the TypeScript types provided. Here are the 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 (code below) together that if typed would really help me understand how to get the types working with 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
returns 一个数字。
我已经为 p-waterfall 打开了一个 PR,它可以让你轻松地做你想做的事。 See here.
同时,您可以使用两种解决方法:
你可以直接用我的fork:
npm uninstall p-waterfall
npm install https://github.com/sindresorhus/p-waterfall/tarball/c6802cc6c55f00803a3262db2f119c69d07241ec
- 然后使用我在 GitHub 问题
中解释的 const 断言
可以直接传递transformers
数组,不需要创建中间变量。这样 p-waterfall 就会正确处理。 See on StackBlitz
我正在使用 p-waterfall and I would like to know how to use the TypeScript types provided. Here are the 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 (code below) together that if typed would really help me understand how to get the types working with 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
returns 一个数字。
我已经为 p-waterfall 打开了一个 PR,它可以让你轻松地做你想做的事。 See here.
同时,您可以使用两种解决方法:
你可以直接用我的fork:
npm uninstall p-waterfall
npm install https://github.com/sindresorhus/p-waterfall/tarball/c6802cc6c55f00803a3262db2f119c69d07241ec
- 然后使用我在 GitHub 问题 中解释的 const 断言
可以直接传递
transformers
数组,不需要创建中间变量。这样 p-waterfall 就会正确处理。 See on StackBlitz