首页 > 解决方案 > 为什么 import xxx = require('package') 比 const xxx = require('package') 好?这是真的吗?

问题描述

我有它建议:

import xxx = require('package');

优于:

const xxx = require('package');  

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

标签: javascripttypescript

解决方案


import xxx = require('package');是导入模块的旧 typescript 语法,建议您切换到新的 ES 标准导入语法。如果模块不支持它,这可能并不总是可行:

CommonJS 和 AMD 通常都有一个导出对象的概念,它包含一个模块的所有导出。

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

使用 导出模块时,必须使用export =TypeScript-specific来导入模块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,因此您不会从您可能为模块安装的任何类型中受益。


推荐阅读