如何声明类似any的TypeScript类类型,实现依赖部分类型定义?
第三方依赖部分类型补全方案
你不需要为第三方依赖全量编写类型定义,只需要在编写模块声明时增加兜底规则,即可保留未声明成员默认作为any类型的行为,同时支持你自定义指定类的精确类型。
具体实现写法
在你的全局类型声明文件(如global.d.ts)中,按如下结构声明对应第三方模块:
// 替换成你需要补全类型的第三方依赖包名 declare module 'target-third-party-package' { // 此处编写你需要精确补全的类型,例如你提到的SomeClass export class SomeClass { // 按需补充属性、方法的类型定义 customMethod(): void; } // 核心兜底规则:所有未显式声明的导出成员自动识别为any [key: string]: any; }
方案说明
- 上述写法生效后,你显式声明的
SomeClass会按照你编写的规则做类型校验,其余所有未声明的导出成员(包括类、函数、常量等)都会被TS识别为any类型,和你未给该依赖编写任何类型声明时的默认行为完全一致,不会触发「no exported member」报错。 - 如果你之前单独为临时跳过的类写声明时遇到无法
new实例化的问题,是因为type Xxx = any的类型别名不包含构造签名,换成类声明写法即可解决:// 错误写法:不支持new实例化 // export type SkipThisClassForNow = any // 正确写法:支持任意参数实例化,实例所有属性方法均为any export declare class SkipThisClassForNow { constructor(...args: any[]); [key: string]: any; }
注意事项
- 同一依赖的所有类型补全代码请放在同一个
declare module代码块内,TS会自动合并同名模块声明,拆分多个块可能导致兜底规则不生效。 - 该兜底写法在TypeScript 4.5及以上版本可直接稳定使用。
内容的提问来源于stack exchange,提问作者Cory Mawhorter
相关产品推荐
相关产品推荐

