静态异步方法的返回类型

时间:2019-01-03 19:07:54

标签: typescript

有人可以为下面的静态异步方法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
    }
  }
}

2 个答案:

答案 0 :(得分:2)

有两种选择:

第一名

根据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

答案 1 :(得分:0)

删除问题已解决

import Promise = require('bluebird');
从文件顶部开始

。那就是问题所在-与TypeScript和Bluebird Promise有关的一些问题。