javascript - 如何将 json 解析传递给带有必填字段的类型变量
问题描述
使用属性Request
定义的类型ID
作为必需和Name
可选:
export type MyRequest =
{
ID: string,
Name?: string
};
我继续通过传递它 json-stringified 来测试它,{ foo: "bar" }
这应该是无效的,因为缺少type MyRequest
必填字段:ID
let jsonData = JSON.stringify( { foo: "bar" } );
let invalidData: MyRequest = JSON.parse(jsonData) as MyRequest;
console.log(invalidData);
令人惊讶的是,它没有错误。
这是一个错误还是在这里json.parse
覆盖type
了 Typescript 的强制执行?
解决方案
当您将对象序列化为普通的string
.
请记住,TypeScript 有助于在运行时之前输入代码,只要它是可静态分析的。如果你告诉 TypeScript 的结果JSON.parse
是类型的MyRequest
,它会在你使用的任何地方假设它,invalidData
但它不会在运行时检查类型,因为这不是 TypeScript 的目的。
推荐阅读
- typescript - 当组件具有非法类型时,使用 TypeScript 创建 React App 中的 Storybook 仍然可以编译
- r - 为什么Rmarkdown中的Knit期间一段R代码不起作用
- java - 片段中的工具栏 onclick 侦听器
- java - 有没有办法使用“GREATEST(field1, field2)”进行选择,其中 field1 和 field2 是同一个选择中的总和?
- microsoft-graph-api - 当应用程序权限读取共享点站点时,令牌中需要存在 scp 或角色声明
- python-3.x - 无法在 3.7.4 和 Spyder 上退出 PyQt 应用程序
- reactjs - 如何将我的“输入”控件中的属性公开给任何其他组件?
- java - 这是同步代码块的安全方法吗?
- php - localhost/phpmyadmin 返回一些原始 php 代码而不是登录页面
- python - 尝试从 Google Cloud Firestore 检索所有文档时如何处理超时错误?