我想编写一个单元测试,以在运行时验证JavaScript对象是否符合TypeScript类型。我正在寻找一种执行此操作的方法,该方法使我可以描述一次类型,然后再用于TypeScript编译时检查和JavaScript运行时检查。该解决方案必须允许嵌套的类结构。
因为一个代码示例值得一千个单词,所以请参阅“ ???”。对于问题的根源:
目标单元测试
it('object literal and TypeScript class should be compatible, () => {
??? psudo-code on line below ???
const isCompatible = (myLiteral ~has matching properties with~ MyClass)
expect(isCompatible).toBeTrue();
});
JavaScript对象文字
var myLiteral = {
entities: {
users: {
'1': { id: 1 },
'2': { id: 2 }
}
}
}
在TypeScript中定义的类
class MyClass {
entities: Entities;
}
class Entities {
users: { [key: string]: User };
}
class User {
id: number;
}
我正在使用normalizer规范化对象。 normalize
方法的输出不是强类型的-因此需要使用as
关键字才能将输出恢复为强类型。这是将来在不知不觉中将错误引入代码库的潜在点。
我想编写单元测试以验证normalizr的输出是否符合我在TypeScript中使用的已经定义的类型
TypeScript接口和类型在运行时不存在...但是,类确实存在,并且类型可以从类派生。我希望有一种方法可以利用这一事实来实现我的目标。也许还有另一种代码生成方式。但是,到目前为止,我一直找不到。或者,也许我在上面提到的整个过程在某种程度上都是错误的,或者我缺少明显的东西。对此欢迎表示反馈。
答案 0 :(得分:0)
项目Typescript Json Schema从TS类生成JSON模式。这些可以在运行时用于验证JS对象文字。
我已经使用该库来验证API的输入并生成合理的响应(例如,输入entities
对象缺少属性MyClass
)。