Testing 测试对象是否符合TypeScript中的接口

Testing 测试对象是否符合TypeScript中的接口,testing,typescript,Testing,Typescript,若我有一个普通的老JavaScript对象和一个TypeScript接口,那个么我如何编写一个测试来断言对象符合我的接口 interface Person { name: string age?: number } describe('Person interface check', () => { it ('should conform to "Person" interface', () => { let obj1 = {name: "Mohsen"};

若我有一个普通的老JavaScript对象和一个TypeScript接口,那个么我如何编写一个测试来断言对象符合我的接口

interface Person {
  name: string
  age?: number
}

describe('Person interface check', () => {
  it ('should conform to "Person" interface', () => {
     let obj1 = {name: "Mohsen"};
     let obj2 = {name: "Hommer", age: 40};

     expect(obj1) // ????
  });
});
EDIT:我不想做深度断言,例如
expect(obj1.name).to.be.a.string

断言符合我的接口的对象

您必须手动执行此操作:

expect(typeof object.name).to.eql("string");
// so on 
更新:编写代码为您执行深层断言
由于TypeScript看到的类型信息在生成的JS中被删除,因此您无法访问JS中的类型信息。但是,您可以编写代码,以获取代码的TS视图(使用typescript语言服务),并生成JS代码,为您执行这些深层断言。

有许多不同的包,允许您在“typecheck”时对此进行测试


下面是一个我写的例子:

我也遇到了同样的问题,我的解决方案是构建一个我的接口。
通过如下方式传递自定义接口,您可以使用为自己构建它:

typescript json模式“/myfile.ts”MyCustomType--strictNullChecks--noExtraProps--required--out=output.json
然后,您可以使用扩展来检查对象是否与生成的模式匹配,如下所示:

const mySchema=require('path/to/output.json'))
expect(myStrangeObject).toMatchSchema(mySchema)
这对我很有吸引力


(我建议熟悉JSON模式关键字),因为那些标志“--StutnUnLultCuffer-NoExtPro”需要“在根据您的接口定义生成模式时会产生很大的差异”

遗憾的是,您不太可能的副本也可以考虑使用。