在Typescript中导入模块的正确方法是什么?

Nicolas S.Xu

阅读有关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函数签名?声明做什么?如果声明,则实现在哪里?

安德鲁·艾森伯格

您显示的示例是实现导入模块的特定方式。这显示了如何有条件地导入模块。这是一个特例,我认为您不必一直这样做。

因此,为了具体回答您的问题,

  1. 完成此操作后:import { ZipCodeValidator as Zip } from "./ZipCodeValidator";TS编译器足够聪明,可以知道如果仅在类型位置使用Zip,则不应加载该模块。第二个require语句是实际导入的位置。

  2. declare需要使用语句来确保TS知道特殊require关键字。如果为node.js使用类型库,则无需显式执行此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在intellij中导入新的python模块的最佳方法是什么?

在ES6中导入和使用d3及其子模块的正确方法是什么?

在 Eclipse 中导入 Maven 项目并将其作为 Java 项目运行的正确方法是什么?

在非 React 构建网站中导入 React 组件的正确方法是什么?

在Python中导入模块后,别名变量的行话是什么?

当我在 python 中编写自己的模块时,导入模块的正确方法是什么?

无法在TypeScript中导入模块

为dev_appserver导入python模块的正确方法是什么?

为使用`python -m zipapp`创建的独立应用程序导入模块的正确方法是什么?

进行Django导入的正确方法是什么?

导入vuetify指令的正确方法是什么?

导入 Promise 的正确方法是什么?

记录CMake模块的正确方法是什么?

在 Svelte 组件中导入 Typescript 模块

在TypeScript中导入时“找不到模块”

从python 2.7中的包中导入名称,子模块或子包的优先级是什么?

在Angular中导入组件和模块的最有效方式是什么?

您可以在多个类中导入相同的模块吗(Python 中接受的约定是什么)?

在Parse.com中导入GeoPoints的正确json格式是什么?

在Terraform中导入的目的是什么?

从ESModules中的复杂路径导入模块的最佳方法是什么

导入es6模块的最佳方法是什么?

为什么在TypeScript中导出模块的所有成员是正确的

使用/导入Laravel外墙的正确方法是什么?

将 js 类导入 Svelte 组件的正确方法是什么?

分别导入Vuetify组件的正确方法是什么?

导入jquery.inputmask的正确方法是什么?

从其他文件导入变量的正确方法是什么?

将数据导入 tensorflow 的正确方法是什么?