网站搜索

在 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))