研发协作
测试文件中有 as 类型断言或需要传部分测试数据时,迁移到…
在测试代码中把 `as` 断言替换为 @total-typescript/shoehorn 的 `fromPartial()`、`fromAny()` 等类型安全辅助函数,尤其适合大型对象只需少量属性的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
测试文件中有 as 类型断言或需要传部分特定
解决思路
- 向用户询问:哪些测试文件中的 `as` 断言导致了问题?
- 向用户询问:是否在处理大型对象,但只有部分属性重要?
- 向用户询问:是否需要为错误测试传入故意错误的数据?
- 安装依赖:`npm i @total-typescript/shoehorn`。
- 查找带 `as` 断言的测试文件:`grep -r " as [A-Z]" --include="*.test.ts" --include="*.spec.ts"`。
- 将 `as Type` 替换为 `fromPartial()`。
- 将 `as unknown as Type` 替换为 `fromAny()`。
- 从 `@total-typescript/shoehorn` 添加 imports。
- 运行 type check 验证。
- 对于大型对象且只需少量属性:把原来需要伪造全部属性的对象改为只传关心的属性,并包在 `fromPartial({ ... })` 中;例如 `getUser(fromPartial({ body: { id: "123" } }))`。
- `as Type` → `fromPartial()` 迁移示例:`getUser(fromPartial({ body: { id: "123" } }))`。
- `as unknown as Type` → `fromAny()` 迁移示例:`getUser(fromAny({ body: { id: 123 } }))`。
- 按用途选择函数:`fromPartial()` 用于传仍能通过类型检查的 partial data;`fromAny()` 用于传故意错误的数据并保留 autocomplete;`fromExact()` 用于强制完整对象,之后可换成 `fromPartial`。
适用边界 · 注意事项
- 不要在生产代码中使用 shoehorn;它只适用于测试代码。
- 如果测试中没有 `as` 断言造成的问题,或不需要 partial test data,则无需迁移。