根据需要使用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的目的。