我曾建议:
import xxx = require('package');
优于:
const xxx = require('package');
并保留所有类型定义。这是真的? 似乎第一种语法可能更好,但是当import和require像这样一起使用时,我仍然感到困惑。
答案 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
类型,因此您将无法从可能拥有的任何类型中受益为模块安装。