如何将json解析传递给具有必需字段的Type变量



根据需要使用ID属性和可选Name定义Request类型:

export type MyRequest = 
{
ID: string, 
Name?: string
};

我继续测试它,将json字符串化的{ foo: "bar" }传递给它,这对于type MyRequest来说应该是无效的,因为缺少所需的ID字段:

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

令人惊讶的是,它处理得很好,没有任何错误。

这是一个错误还是json.parse覆盖了此处Typescript的type强制执行?

当您将对象序列化为普通string时,您的键入将丢失。

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

最新更新