首页 > 解决方案 > 如何安全地将对象转换为记录

问题描述

如何安全地将 Typescript 转换objectRecord<PropertyKey, unknown>? 例如,在读取 JSON 时,您会得到一个any真正应该存在的对象unknown(我假设它不是为了向后兼容):

const ob = JSON.parse("{}") as unknown;

我可以使用类型断言将其转换unknown为:object

if (typeof ob !== "object" || ob === null) {
  throw new Error("Not an object");
}
// Typescript now infers the type of ob as `object`

但是我现在要做什么检查来说服 Typescript 把它当作是安全的Record<PropertyKey, unknown>呢?有可能有object不是Records的s吗?

我确定必须说,但我不是在寻找ob as Record<PropertyKey, unknown>.

标签: typescript

解决方案


感谢@Jack Wilson,这行得通,尽管扩展Object界面似乎有点恶心。

interface Object {
    [index: string]: unknown; // You can't do `[index: PropertyKey]` or `[P in PropertyKey]` for some reason.
    [index: number]: unknown;
}

const ob = JSON.parse("{}") as unknown;

if (!(ob instanceof Object)) {
  throw new Error("Not an object");
}

const a = ob["foo"]; // a is unknown.

推荐阅读