如何在不导入TypeScript中的模块的情况下导入定义?

时间:2019-04-09 23:41:28

标签: node.js typescript

我正在使用一个npm模块,该模块要求在将环境变量require加载之前设置一个环境变量,但是直到运行时我才知道该变量的值。

我可以通过在顶部创建一个空白变量并仅在第一次需要该模块时才使用require来延迟加载模块,但这并不能为我提供定义。

可以说我需要导入的模块名为dependency

let Dependency: any

function loadDependency(value: string)
{
    process.env.REQUIRED_VALUE = value
    Dependency = require("dependency")
}

//load the dependency only once we determine what required value is
loadDependency("100")

//make use of the now-imported dependency
Dependency.whatever()

我希望有一种方法可以在这种情况下为我的Dependency变量指定类型定义,而不必为此使用any类型。

1 个答案:

答案 0 :(得分:0)

更新 您可以创建一个虚拟类型,如以下答案所示:https://stackoverflow.com/a/42990843

————————————————

类似的事情应该可以解决。

declare function require(moduleName: string): any;

import { ZipCodeValidator as Zip } from "./ZipCodeValidator";

if (needZipValidation) {
    let ZipCodeValidator: typeof Zip = require("./ZipCodeValidator");
    let validator = new ZipCodeValidator();
    if (validator.isAcceptable("...")) { /* ... */ }
}

来源:https://www.typescriptlang.org/docs/handbook/modules.html

请参见

  

可选模块加载和其他高级加载方案