求助:编写适配特定导入方式的JS库*.d.ts类型定义文件
解决JavaScript库类型定义匹配问题
你的类型定义和JS库的实际导出方式不匹配——当前代码用export default声明默认导出,但你的库只支持import * as MyLib from 'my-lib'或require的导入方式,不支持默认导入,所以需要调整类型定义:
推荐写法(兼容CommonJS和ES模块)
declare module "my-lib" { class MyLib { // 补充类的构造函数、属性、方法等类型定义 constructor(); } export = MyLib; }
这种写法完全匹配你库的使用场景:
- 支持
const MyLib = require('my-lib') - 支持
import * as MyLib from 'my-lib' - TypeScript会自动禁止
import MyLib from 'my-lib'的默认导入(因为没有声明默认导出)
替代写法(ES模块优先场景)
如果你的库是用ES模块语法导出的(比如export class MyLib {}),也可以用这种写法:
declare module "my-lib" { export class MyLib { // 补充类的成员定义 constructor(); } }
这种写法下,import * as MyLib from 'my-lib'依然有效(MyLib会包含这个命名导出的类),同时不会支持默认导入,符合你的需求。
为什么原来的写法不对
你之前的export default class MyLib会让TypeScript认为库支持默认导入,但实际你的JS库并没有提供默认导出,导致:
import MyLib from 'my-lib'在类型检查时通过,但运行时失败import * as MyLib from 'my-lib'会被TypeScript识别为一个包含default属性的对象,而非构造函数本身,导致new MyLib()会出现类型错误
内容的提问来源于stack exchange,提问作者Grogi
相关产品推荐
相关产品推荐

