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

如何获取动态导入类实例的TypeScript类型并导出?

捕获DiffPatcher实例类型并导出到模块级

要获取jsondiffpatch中DiffPatcher的实例类型并将其作为模块级实体导出,你可以结合TypeScript的InstanceType工具类型来实现:

步骤1:定义并导出实例类型

// 先获取DiffPatcher类的构造函数类型
type DiffPatcherConstructor = typeof import('jsondiffpatch')["DiffPatcher"];
// 用InstanceType提取构造函数对应的实例类型并导出
export type DiffPatcherInstance = InstanceType<DiffPatcherConstructor>;

你之前的写法type Foo = typeof import('jsondiffpatch')["DiffPatcher"]得到的是类本身的构造函数类型,而非实例类型。InstanceType<T>是TypeScript专门提供的工具类型,用于从构造函数类型T中提取对应的实例类型,正好解决你的问题。

步骤2:在代码中使用导出的类型

你可以在动态导入的函数中返回实例,并使用导出的类型进行标注,也能在模块级变量中直接使用该类型:

// 承接上面的类型定义
type DiffPatcherConstructor = typeof import('jsondiffpatch')["DiffPatcher"];
export type DiffPatcherInstance = InstanceType<DiffPatcherConstructor>;

// 创建实例的函数,返回值标注为导出的实例类型
async function createDiffPatcher(): Promise<DiffPatcherInstance> {
  const jsondiffpatch = await import('jsondiffpatch');
  return new jsondiffpatch.DiffPatcher();
}

// 模块级变量使用该类型
let globalDiffPatcher: DiffPatcherInstance;

(async () => {
  globalDiffPatcher = await createDiffPatcher();
  // 此时globalDiffPatcher会拥有DiffPatcher实例的完整类型提示
})();

如果jsondiffpatch库本身提供了官方的实例类型导出(比如部分库会额外导出DiffPatcherInstance这类类型),你也可以直接引用库自带的类型,但如果没有的话,上面的方法是通用且可靠的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:07:06