有人可以为下面的静态异步方法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
}
}
}
答案 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>
在您的代码中,您返回false
或true
,因此两者之间不匹配。
您可以解决它:
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有关的一些问题。