javascript 在TypeScript(不带Node.js)中使用原生动态ES2020模块并键入内容

kd3sttzy  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(129)

我有一个使用es 16模块的TypeScript应用程序,大部分模块都是静态导入的。现在我想使用一个只在调试模式下导入的(validator-)模块。它可以正常工作,但我不知道如何输入东西,以便获得代码完成和错误检查。
main. ts 主类中,我有:

...
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.ts 的顶部,我会加载文件,而不管我是否需要它,这完全破坏了动态导入的意义。
我可能会尝试在main.ts中为 moduleValidator 编写一个类型声明,但即使这不会发生冲突,我也必须手动使其与实际模块保持同步,这显然不是我想要的。
我可能错过了一些明显的东西,但我找不到是什么。我发现很难搜索原生es 2020/2022模块与Typescrit的(纯粹)使用,因为有这么多关于节点模块等的信息掩盖了它。

jjhzyzn0

jjhzyzn01#

实际上,您可以将importtypeof一起使用,以获取导入模块的类型:

private validate(module: typeof import("./validator.js")) { ... }

或者,您可以使用仅类型导入,它将在输出中被删除:

import type * as ValidatorModule from "./validator.js";

// ...

private validate(module: ValidatorModule) { ... }

相关问题