我有一个TypeScript函数,它返回类型Foo
:
interface Foo {
bar: string;
baz: string;
}
function getFoo(): Foo {
return {
bar: 'hello',
baz: 'world',
};
}
// Chai Assertion
it('Should return a Foo', () => {
expect(getFoo()).to.deep.equal({
bar: 'hello',
baz: 'world',
});
})
当我更改Foo
接口时,我的getFoo()
函数会产生TypeScript错误:
interface Foo {
bar: number; // change these to numbers instead
baz: number;
}
function getFoo(): Foo {
// Compile time error! Numbers aren't strings!
return {
bar: 'hello',
baz: 'world',
};
}
但是,我的Mocha测试不会触发编译时错误!
是否有进行expect().to.deep.equal()
的类型安全的方法?像这样:
// Strawman for how I'd like to do type-safety for deep equality assertions,
// though this generic signature still seems unnecessary?
expect<Foo>(getFoo()).to.deep.equal({
bar: 'hello',
baz: 'world',
});
答案 0 :(得分:2)
是否有一种类型安全的方式进行Expect()。to.deep.equal()
不在equal
的类型定义中,它们是有意any
的类型,因为它是为运行时检查而设计的。
但是在外部轻松实现:
const expected: Foo = {
bar: 'hello',
baz: 'world',
};
expect(getFoo()).to.deep.equal(expected);