有人可以为下面的静态异步方法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>
在代码中,返回false
或true
,因此两者不匹配。
您可以解决它:
- 将函数的类型返回更改为
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承诺有关的问题。