在 Record 中测试 promise 是否存在会引发 TypeScript 错误
我不明白为什么在测试对象中 promise 的存在时,TypeScript 会抛出以下错误。
这个条件将始终返回 true,因为这个 'Promise' 始终被定义。
你忘了使用 'await' 吗?
我需要修改我的类型吗?
const xRecord: Record<string, Promise<number>> = {}
const generateX = async () => {
// long async stuff here
return Math.random()
}
const getX = async (key: string) => {
if(xRecord[key]){ // typescript error here
return xRecord[key]
}
return xRecord[key] = generateX()
}
const x = await getX('foo')
const x2 = await getX('foo')
答案#1
这个警告是适当的,因为实际上一个(promise)对象总是为真。然而,如果目标是测试 xRecord 是否 拥有 key,那么可以这样做:
if (key in xRecord)
由于这也会查看对象的原型链,你可能想要更具体地指出你正在寻找一个自身属性:
if (Object.hasOwn(xRecord, key))
