首页 > 解决方案 > 如何将 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 的强制执行?

标签: javascriptnode.jstypescript

解决方案


当您将对象序列化为普通的string.

请记住,TypeScript 有助于在运行时之前输入代码,只要它是可静态分析的。如果你告诉 TypeScript 的结果JSON.parse是类型的MyRequest,它会在你使用的任何地方假设它,invalidData但它不会在运行时检查类型,因为这不是 TypeScript 的目的。


推荐阅读