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
}
}
}
解决方案
有两种选择:
第一
根据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
推荐阅读
- java - JVM 调试连接器内部结构和安全性
- android - 使用 android:elevation 使 TextView 消失
- macos - macOS Mojave 10.14.4 上的二进制 /etc/hosts 文件
- javascript - 使用通过选中的单选按钮循环的对象填充数组每次都会给出相同的值
- android - Android 服务因应用程序而停止
- ruby-on-rails - 在活动管理员中为全球化设置语言环境
- python - 导入多个 CSV 文件时,按顶部单元格过滤要导入的行
- python - Python将键具有多个值的字典转换为元组列表
- sql-server - WHERE NOT IN 的子查询未按预期过滤数据
- reactjs - 打字稿 | Typescript 在 IProps 上扩展 formikProps 时缺少 27 个 Props