为什么import xxx = require('package')优于const xxx = require('package')?这是真的吗?

时间:2019-04-28 04:36:07

标签: javascript typescript

我曾建议:

import xxx = require('package');

优于:

const xxx = require('package');  

并保留所有类型定义。这是真的? 似乎第一种语法可能更好,但是当import和require像这样一起使用时,我仍然感到困惑。

1 个答案:

答案 0 :(得分:2)

import xxx = require('package');是用于导入模块的旧打字稿语法,建议您切换到新的ES标准导入语法。如果模块执行not support it,则并非总是可能的:

  

CommonJS和AMD通常具有导出对象的概念,其中包含来自模块的所有导出。

     

它们还支持使用自定义单个对象替换导出对象。默认导出旨在替代此行为;但是,两者是不兼容的。 TypeScript支持export =来建模传统的CommonJS和AMD工作流程。

     

使用export =导出模块时,必须使用特定于TypeScript的import module = require("module")导入模块

如果您要在import xxx = require('package')const xxx = require('package')之间做出选择,我肯定会使用import版本。

import版本触发打字机机制来解析该模块并正确键入导入变量(利用该模块具有的所有模块定义)。

const版本仅是对节点定义中定义的函数的函数调用

declare var require: NodeRequire;
interface NodeRequire extends NodeRequireFunction { /*...*/ }

interface NodeRequireFunction {
    (id: string): any; // just returns any.
}

如您所见,此函数针对任何给定的模块名称返回any,因此实际上保存导入的变量将为any类型,因此您将无法从可能拥有的任何类型中受益为模块安装。