@types/check-types接口缺失in定义致TS报错,如何扩展类型?
如何扩展@types/check-types的类型定义以支持assert.in?
问题描述
我使用以下代码时:
assert.in(name, ['values', 'some',])
触发了TypeScript错误:
Property 'in' does not exist on type 'ExtendWithAssert<CheckTypePredicates> & ExtendWithAssert<Pick<CheckType, "not" | "maybe">> & AssertFunction'.
检查后发现,@types/check-types的类型定义文件(index.d.ts)中缺少了in方法的类型声明,需要补充的内容如下:
interface CheckType { // ... in(a: any, value: any[]): boolean; // <-- 需要添加这行 } type CheckTypePredicates = Pick< CheckType, // ... | "in" // <-- 需要添加这行 >;
解决方案:手动扩展类型定义
在你的项目中创建一个自定义类型声明文件(比如src/types/check-types.d.ts),写入以下内容来扩展原类型:
declare module 'check-types' { interface CheckType { in(a: unknown, values: readonly unknown[]): boolean; } type CheckTypePredicates = Pick< CheckType, | "in" | "is" | "maybe" | "not" | "has" // 可根据原类型定义补充其他已存在的属性,保证类型完整性 >; }
保存后,TypeScript会自动合并原类型定义与你扩展的部分,assert.in的类型错误即可解决。
更新:相关PR已被接受,后续版本的@types/check-types会内置该类型定义,无需再手动扩展。
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

