"p-waterfall" TypeScript Türleri Nasıl Kullanılır


Ben p-waterfall kullanıyorum ve sağlanan TypeScript türlerini nasıl kullanacağımı bilmek istiyorum. İşte türler.

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>;
  ...

Aşağıdaki örnek (kod) ile bir araya getirdim; yazılırsa, p-waterfall ile tiplerin nasıl çalıştığını anlamama gerçekten yardımcı olur.

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 bilinmiyor ama number olmalı çünkü pWaterfall'a geçirilen son fonksiyon bir sayı döndürüyor.

Cevap #1

İstediğin şeyi kolayca yapmana olanak sağlayacak p-waterfall için bir PR açtım. Buradan bakabilirsin.

Bu arada, kullanabileceğiniz iki geçici çözüm var:

  1. Benim çatalımı doğrudan kullanabilirsiniz:

    • npm uninstall p-waterfall
    • npm install https://github.com/sindresorhus/p-waterfall/tarball/c6802cc6c55f00803a3262db2f119c69d07241ec

      • Bu komut doğrudan benim c6802cc6c55f00803a3262db2f119c69d07241ec commit'imden kurulum yapar
    • Ve sonra GitHub sorununda açıkladığım const beyanını kullan.
  2. transformers dizisini, ara bir değişken oluşturmadan doğrudan geçirebilirsiniz. Bu şekilde p-waterfall doğru şekilde alacaktır. StackBlitz'te bakın

İlgili makaleler