如何使用“p-waterfall”TypeScript 类型
Posted
技术标签:
【中文标题】如何使用“p-waterfall”TypeScript 类型【英文标题】:How to use "p-waterfall" TypeScript Types 【发布时间】: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
的最后一个函数返回一个数字。
【问题讨论】:
【参考方案1】:我已经为 p-waterfall 打开了一个 PR,它可以让你轻松地做你想做的事。 See here.
与此同时,您可以使用两种解决方法:
你可以直接使用我的fork:
npm uninstall p-waterfall
npm install https://github.com/sindresorhus/p-waterfall/tarball/c6802cc6c55f00803a3262db2f119c69d07241ec
此命令直接从my commit c6802cc6c55f00803a3262db2f119c69d07241ec 安装
然后使用我在 GitHub 问题中解释的 const 断言
您可以直接传递transformers
数组,而无需创建中间变量。这样,p-waterfall 就会正确。 See on StackBlitz
【讨论】:
以上是关于如何使用“p-waterfall”TypeScript 类型的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio:如何使用 IIS Express 和跨项目引用在共享项目中调试 TypeScript(无链接或复制文件)