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中没有表示形式,并且它们没有以任何方式被模拟