javascript - 为什么 import xxx = require('package') 比 const xxx = require('package') 好?这是真的吗?
问题描述
我有它建议:
import xxx = require('package');
优于:
const xxx = require('package');
并保留所有类型定义。这是真的?似乎第一种语法可能更好,但是当 import 和 require 像这样一起使用时,我仍然感到困惑。
解决方案
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
,因此您不会从您可能为模块安装的任何类型中受益。
推荐阅读
- python - 如何将数组中的项目转换为字节以进行散列?
- c - 为什么 tcache bin 与 arena 相关联?
- r - 如何知道向量是否由相同的元素组成?
- c++ - C ++中的计时计时器加倍
- java - 我的运动冻结了,我不明白为什么
- amazon-web-services - 如何强制删除 S3 存储桶中的所有对象版本,然后最终使用 aws-sdk-go 删除整个存储桶?
- docker - docker 需要虚拟化
- java - 如何在 php 上读取 Java 提交的数据?
- python - FFT 图像的 IFFT 导致原始图像出现奇怪的上下重叠
- python - Python - 将联系人保存到通讯录并打印通讯录