如何检查对象是否符合typescript中接口的模式?

时间:2018-04-19 13:19:04

标签: validation typescript object interface typechecking

我有一个定义了某些属性的接口。 例如:

interface Student {
name: string;
dob:string;
age:number;
city:string;
}

我读了一个JSON文件,其中包含这种格式的记录并将其分配给变量。

let s1:Student = require('./student.json');

现在,我想验证s1是否包含接口Student中提到的所有属性。在运行时,这不会被验证。有什么方法可以做到这一点吗? 有一种类型警卫的选择,但这不符合此目的。我不知道哪些字段会来自JSON文件。我也无法添加鉴别器(无数据操作);

1 个答案:

答案 0 :(得分:0)

如果没有显式编写代码,这在TypeScript中是不可能的。为什么?因为一旦它通过编译器,你的代码看起来像这样:

let s1 = require('./student.json');

编译完成后,与类型相关的所有内容都会被删除,只留下纯JavaScript。 TypeScript永远不会发出代码来验证类型检查在运行时实际上是否成立 - this is explicitly outside of the language's design goals

所以,不幸的是,如果你想要这个功能,你将不得不写if (s1.name)if (s1.dob)等。

(也就是说,值得注意的是有third-party projects旨在为TypeScript添加运行时类型检查,但它们仍然是实验性的,并且它们都会成为实际TypeScript语言的一部分是值得怀疑的。 )