【问题标题】:How to use "p-waterfall" TypeScript Types如何使用“p-waterfall”TypeScript 类型
【发布时间】: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


    【解决方案1】:

    我已经为 p-waterfall 打开了一个 PR,它可以让你轻松地做你想做的事。 See here.

    与此同时,您可以使用两种解决方法:

    1. 你可以直接使用我的fork:

      • npm uninstall p-waterfall
      • npm install https://github.com/sindresorhus/p-waterfall/tarball/c6802cc6c55f00803a3262db2f119c69d07241ec
      • 然后使用我在 GitHub 问题中解释的 const 断言
    2. 您可以直接传递transformers 数组,而无需创建中间变量。这样,p-waterfall 就会正确。 See on StackBlitz

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2022-01-05
      • 2021-06-09
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      相关资源
      最近更新 更多