首页 > 解决方案 > 'export default' 和 'export =' 和 TypeScript 中使用 `import = require()` 的区别?

问题描述

最近一个项目中的一个 eslint 规则no-var-requires迫使我写import = require(). 直到现在我才看到这个,我在导入方面也没有任何问题,但阅读它表明这已经是 2017 年的事情了。这让我想知道为什么有人会强制执行这个 - 或者更好的是,为什么它被认为是一种不好的做法,require()以及两者之间的实际区别是什么

export default class ZipCodeValidator { }
export = class ZipCodeValidator { }

在我的理解中,后者与import = require()TS 中的语法直接相关?


关于export =import = require()^的文档说

CommonJS 和 AMD 都支持用自定义的单个对象替换导出对象。默认导出旨在替代此行为;然而,两者是不相容的。

但所有这些工作都很好

require('dotenv').config() // this is what I used originally
import dotenv = require('dotenv') // the eslint rule forces me to write this
dotenv.config()
const dotenv = require('dotenv')
dotenv.config()
import * as dotenv from 'dotenv' // This is what I've been using otherwise
dotenv.config()

这让我想知道import = require()首先的目的。

它不是仅仅require 在一行中使用光滑的不显眼的调用,而是迫使我将导入和调用分成两行,这反过来又带来了另一个复杂性。我们有一个 lint/prettier 规则来组织导入到顶部,但这使得其他导入的模块在我的环境初始化之前运行。


原谅我问得这么含糊,但我什至不知道从哪里开始。

标签: typescriptmodulerequire

解决方案


推荐阅读