【问题标题】:What should the return type of Promise.race be? (Typescript)Promise.race 的返回类型应该是什么? (打字稿)
【发布时间】:2021-12-02 02:02:40
【问题描述】:

例如在下面的代码中,响应的类型应该是什么? Typescript 不断给我错误,例如,Type 'unknown' is not assignable to type 'Promise'

const response: [what type???] = await Promise.race([
      apicall(),
      timeoutPromise(),
    ]);

【问题讨论】:

  • Promise.race 从首先解决的任何一个 Promise 返回值的 Promise,然后您 await 该 Promise 并获取该值。那么apicalltimeoutPromise 返回的承诺是什么?
  • apicalltimeoutPromise 返回什么类型?结果将是ReturnType<typeof apicall> | ReturnType<typeof timeoutPromise>,但它几乎没有用处。
  • 请提供minimal reproducible example,清楚地表明您面临的问题。理想情况下,有人可以将代码放入像The TypeScript Playground (link here!) 这样的独立IDE 中,然后立即着手解决问题,而无需首先重新创建它。所以应该没有错别字、不相关的错误或未声明的类型或值。
  • 如果您在发布的行上收到错误,那么它与Promise.race() 的返回类型无关;表示apicall()timeoutPromise()的返回类型为unknown

标签: typescript typescript-typings typescript-generics react-typescript


【解决方案1】:

Typescript 无法确定哪个 promice 将首先被解决,甚至其中任何一个都将被解决。所以你应该为 Promice.race 提供一个类型:

type PromiseType1 = string
type PromiseType2 = string
const apicall = () => new Promise<PromiseType1>(() => {})
const timeoutPromise = () => new Promise<PromiseType2>(() => {})

const response = await Promise.race<PromiseType1 | PromiseType2>([
  apicall(),
  timeoutPromise(),
]);

【讨论】:

    猜你喜欢
    • 2023-01-09
    • 2016-11-06
    • 2020-06-29
    • 2022-08-13
    • 2019-07-22
    • 1970-01-01
    • 2021-09-18
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多