静态异步方法的返回类型



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

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

请注意,我为非静态异步方法创建正确的返回类型没有问题。

我正在使用打字稿 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
    }
  }
}

有两种选择:

第一

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

因此,您可以将"lib": ["es2018", "dom"]添加到tsconfig.json文件compilerOptions部分。

函数的定义是: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

通过删除解决了问题

import Promise = require('bluebird');

从文件顶部。这就是问题所在——一些与TypeScript和Bluebird承诺有关的问题。

相关内容

最新更新