首页 > 解决方案 > 静态异步方法的返回类型

问题描述

有人可以为下面的静态异步方法 loadArray() 建议正确的 Typescript 返回类型吗?

Promise<boolean>如下所示产生错误:“异步函数或方法的返回类型必须是全局 Promise type.ts(TS1064)”

请注意,我可以为非静态异步方法创建正确的返回类型。

我正在使用 TypeScript 3.2.2。

class DataItemUpdate {
  type: string;
  json: {
    id: string;
    owner: string;
  }
  static async loadArray(outputForAppend: DataItemUpdate[], inputKeys: string[], typeName: string): Promise<boolean> {
    const redisMulti = redisClient.multi();
    inputKeys.forEach(keyName => {
      redisMulti.get(`${keyName}:json`);
    })
    let loaded: (string | null)[] = await redisMulti.execAsync();
    if (loaded.includes(null)) { // If any item failed to load
      return false
    } else {
      outputForAppend.push(
        ...loaded.map(jsonString => {
          return { 'type': typeName, 'json': JSON.parse(jsonString) };
        })
      )
      return true
    }
  }
}

标签: typescript

解决方案


有两种选择:

第一

根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function异步函数的返回被隐式包装到 Promse。

所以你可以添加"lib": ["es2018", "dom"]到文件compilerOptions的一部分tsconfig.json

第二

你的函数的定义是:static async loadArray(...): Promise<boolean>并且类型返回是Promise<boolean>

在您的代码中,您返回falsetrue两者之间存在不匹配。

你可以解决它:

  • 您将函数的类型返回更改为boolean

或者

  • 你可以做Promise.resolve([your_boolean])Promise.reject([your_boolean])

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise


推荐阅读