我有一个使用es16模块的TypeScript应用,它们中的大多数都是静态导入的。我想使用一个(验证器-)模块,现在只在调试模式下导入。这一切都在工作,但我不知道如何输入东西,以便我得到代码完成和错误检查。
在我的主类main。s我有:
...
if(debug){
import('./validator.js').then((module) => this.validate(module))
}
...
validate方法是这样的:
private validate(module):void{
new module.Validator(dataToValidate);
}
validator.js包含:
export class Validator{
coonstructor(data:MyDatatype){
stuff going on here...
}
}
我想知道/做的是:
validate方法中的:
private validate(module:someMeaningfulType){...}
,我还想导入Validator类,而不是实际导入它。如果我写
import {Validator} from './validate.ts'
main的顶部。我将加载文件,无论我需要它,这破坏了动态导入的全部意义。
我可能会尝试在main中为模块和验证器编写类型声明。但是,即使这不会以某种方式冲突,我也必须手动将其与实际模块保持同步,这显然不是我想要的。我可能错过了一些明显的东西,但我不能找出是什么。我发现很难在Typescrit中搜索原生es2020/2022模块的(纯)使用,因为有太多关于节点模块等的信息掩盖了它。
您实际上可以使用import
和typeof
来获取导入模块的类型:
private validate(module: typeof import("./validator.js")) { ... }
或者,您可以使用仅类型导入,它将在输出中被删除:
import type * as ValidatorModule from "./validator.js";
// ...
private validate(module: ValidatorModule) { ... }