网站搜索

TypeScript - 如何安全地从未知对象读取属性?


我想安全地访问一个 unknown 对象的属性(例如由 JSON.parse 生成的对象)。首先,我使用 typeof x === 'object' 来检查它是否是对象(或 null),然后我使用可选链 ?.[ 来避免读取 null 的属性。

这对我来说似乎是安全的,但 TypeScript 仍然报错如下:

元素隐式地具有 'any' 类型,因为类型为 '"k"' 的表达式不能用于索引类型 '{}'。属性 'k' 在类型 '{}' 上不存在。

function foo(x: unknown) {
    if (typeof x === 'object') {
        x?.['k'];
    }
}

游乐场链接

有没有办法让 TypeScript 相信我正在安全地访问这个属性,最好是在不进行向下类型转换/as 的情况下?