【问题标题】:TypeScript dynamic module loading issue with typeof使用 typeof 的 TypeScript 动态模块加载问题
【发布时间】:2025-11-23 15:55:01
【问题描述】:

我正在动态加载我创建的模块,如下所示:

myModule.ts

export class SomeClass {
 ...
}
export type SomeType = {...}

在另一个文件中,我这样做:

import * as MyModuleType from "./myModule"
if(...) {
  let loadedModule: typeof MyModuleType = require("./myModule");
  ...
}

MyModuleType 的类型同时具有 SomeClass 和 SomeType(如预期的那样)。而loadedModule 的类型只有SomeClass(不完整类型!)。我该如何解决这个问题?

打字稿版本:2.3.2

编辑器:atom,使用 atom-typescript v10.1.15

谢谢。

【问题讨论】:

    标签: javascript typescript module require typeof


    【解决方案1】:

    TS 中的类型描述值。所以typeof MyModuleType 描述了运行时模块值的形状。模块值只有一个属性,即SomeClass。而且它没有任何属性SomeType

    如果要获取类型 jsut 引用导入:

    var x: MyModuleType.SomeType;

    TS 编译器仍然知道您的导入仅用作类型,将被省略。

    【讨论】:

    • 感谢您的回复,如果 import 语句和动态 require 语句在一个文件中,则您所说的有效。如果我想将loadedModule 传递给另一个文件,并且我想在该文件中没有 import * as .... 语句的情况下这样做,该怎么办。然后我将如何通过loadedModule 获得“SomeType”访问权限?