Javascript 如何使用必填字段将json解析传递给类型变量

Javascript 如何使用必填字段将json解析传递给类型变量,javascript,node.js,typescript,Javascript,Node.js,Typescript,根据需要使用ID属性定义Request类型,并将Name作为可选项: export type MyRequest = { ID: string, Name?: string }; 我继续通过传递json stringified{foo:“bar”}来测试它,这对于类型MyRequest应该是无效的,因为缺少所需的ID字段: let jsonData = JSON.stringify( { foo: "bar" } ); let invalidDa

根据需要使用
ID
属性定义
Request
类型,并将
Name
作为可选项:

export type MyRequest = 
  {
    ID: string, 
    Name?: string
  };
我继续通过传递json stringified
{foo:“bar”}
来测试它,这对于
类型MyRequest
应该是无效的,因为缺少所需的
ID
字段:

let jsonData = JSON.stringify( { foo: "bar" } );
let invalidData: MyRequest = JSON.parse(jsonData) as MyRequest;

console.log(invalidData);
令人惊讶的是,它处理得很好,没有错误


这是一个bug还是
json.parse
在这里覆盖了类型脚本的
type
强制执行?

当您将对象序列化为普通
字符串时,您的键入将丢失


请记住,TypeScript有助于在运行时之前键入代码,无论它在何处可以进行静态分析。如果您告诉TypeScript,
JSON.parse
的结果是类型
MyRequest
的,那么无论您在哪里使用
invalidData
它都会假定这一点,但它不会在运行时检查类型,因为这不是TypeScript的目的。

如果序列化并反序列化类型,它应该如何保留该类型它?请给出一个答案,解释为什么序列化然后反序列化数据将导致Typescript绕过所需的字段验证,以便我们可以对其进行投票。甚至比“但它不会在运行时检查类型,因为这不是Typescript的目的”,到那时,类型已经被删除了,所以它实际上无法做到这一点是的,当然类型脚本类型在JavaScript中没有表示形式,并且它们没有以任何方式被模拟