如何使用“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 类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ionic 中将文本转换为 html 对象

Visual Studio:如何使用 IIS Express 和跨项目引用在共享项目中调试 TypeScript(无链接或复制文件)

如何从切片(redux 工具包)中获取映射到字符串的操作的类型安全 POJO

vue3

TypeScript基础教程

TypeScript基础教程