typescript - 如何安全地将对象转换为记录
问题描述
如何安全地将 Typescript 转换object
为Record<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
不是Record
s的s吗?
我确定必须说,但我不是在寻找ob as Record<PropertyKey, unknown>
.
解决方案
感谢@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.
推荐阅读
- python - 从存储在python文本文件中的数据创建数据框
- c - 用C语言递归数到一定的数
- ruby - Array#sample 使用什么随机算法?
- mysql - 所有记录的空值
- javascript - 字符串列表的打字效果。需要帮助修复事件顺序
- javascript - 未捕获的错误:目标容器不是 DOM 元素。(反应网页不会显示任何东西)
- r - r data.table 就地加入多列
- scala - 使用 spark scala 将任何表动态加载到 Hbase
- html - 如何在 iOS 12 上隐藏 html5 视频控件
- javascript - EventTargets 是否需要提供相应的处理程序属性?