首页 > 解决方案 > TypeScript:不确定我是否正确输入了这个返回承诺的函数

问题描述

我有一个 util 函数,可以在端点获取资源列表。我想正确输入这个函数。

type item = {
  id: number
  name: string
}

export default function fetchItems(): Promise<item[]> {
  return fetch(ENDPOINT).then(async (response) => {
    if (response.ok) {
      const json = await response.json()
      return json
    } else {
      return Promise.reject(new Error('Unknown Error'))
    }
  })
}

现在这个函数没有类型错误,但我想知道对于返回类型, Promise<item[]>我是否应该添加一个也包含错误的联合类型,因为它可以拒绝错误,Promise<item[] | Error>或者当前版本很好?

标签: typescript

解决方案


由于可能的 Promise 拒绝原因,TypeScript 不会跟踪类型。(同样,TypeScript 不会跟踪普通同步try/catch错误的类型)。如果你在 TypeScript 中有一个 Promise,你所能做的就是表示解析值的类型;拒绝值不是(也不能)被输入。

例如:

const prom = Promise.reject('foo');

给出一个Promise<never>.

您当前的实现很好;就'Unknown Error'TS 而言,拒绝在类型系统中的任何地方都没有。


推荐阅读