提出问题
在下面的测试代码中,编写的测试用例不需要用到所有的Item
字段,如果用上完整的字段很没必要,不用又ts
检测无法通过,这种情况怎么处理?
// type.ts
export interface Item {
id: string;
name: string;
age: number;
// ...其它n多个字段
}
// utils.ts
export const filterData = (data: Item[]) => {
// ...
}
// utils.test.ts
it('should be equal', () => {
const data = [
{
id: '1',
name: 'tomcat',
}
];
// 这里ts会报错说data不是一个合法的Item[]
expect(filterData(data)).toEqual([
{
id: '1',
name: 'tomcat',
}
]);
分析问题
问题的关键在于,让ts
认为你提供的是完整的Item
,而ts
中的断言就是干这个的。
解决问题
// utils.test.ts
it('should be equal', () => {
const data = [
{
id: '1',
name: 'tomcat',
}
] as Item[];
// 上面的语法告诉ts,data是完整的Item
// 这里ts会报错说data不是一个合法的Item[]
expect(filterData(data)).toEqual([
{
id: '1',
name: 'tomcat',
}
]);
总结问题
该问题属于ts
断言非常合理的使用场景。而断言的意图就是告诉ts
,我掌握的信息比你(ts
)多,相信我,我会处理好。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。