You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:编写适配特定导入方式的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库并没有提供默认导出,导致:

  1. import MyLib from 'my-lib'在类型检查时通过,但运行时失败
  2. import * as MyLib from 'my-lib'会被TypeScript识别为一个包含default属性的对象,而非构造函数本身,导致new MyLib()会出现类型错误

内容的提问来源于stack exchange,提问作者Grogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:45:37