阅读有关Typescript模块的正式文档时,我有些困惑。
declare function require(moduleName: string): any;
// why declare require?
import { ZipCodeValidator as Zip } from "./ZipCodeValidator";
// Zip is being imported here, right?
if (needZipValidation) {
let ZipCodeValidator: typeof Zip = require("./ZipCodeValidator");
// Zip is already imported before if statement, why import again?
let validator = new ZipCodeValidator();
if (validator.isAcceptable("...")) { /* ... */ }
}
问题1:
import { ZipCodeValidator as Zip } from "./ZipCodeValidator";
在上面的代码行之后,ZipCodeValidator已经加载,并且可以在当前文件的模块中作为Zip使用。为什么稍后在if条件中,在下面的代码行中再次加载它?
let ZipCodeValidator: typeof Zip = require("./ZipCodeValidator");
注意:它们使用不同的方法加载同一模块,一种是导入,另一种是必需的。为什么要使用不同的方式?
问题2:
为什么需要声明require函数签名?声明做什么?如果声明,则实现在哪里?
您显示的示例是实现导入模块的特定方式。这显示了如何有条件地导入模块。这是一个特例,我认为您不必一直这样做。
因此,为了具体回答您的问题,
完成此操作后:import { ZipCodeValidator as Zip } from "./ZipCodeValidator";
TS编译器足够聪明,可以知道如果仅在类型位置使用Zip,则不应加载该模块。第二个require语句是实际导入的位置。
declare
需要使用该语句来确保TS知道特殊require
关键字。如果为node.js使用类型库,则无需显式执行此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句