为何`import ManagerRoleEnum = ManagerBean.ManagerRoleEnum`是合法TypeScript代码?
为什么
import ManagerRoleEnum = ManagerBean.ManagerRoleEnum是合法的TypeScript代码? 这是TypeScript专为命名空间/模块成员设计的别名导入语法,属于TS自身对ES模块语法的扩展,完全符合TS的语法规范:
- 首先,
ManagerBean是你通过Swagger生成的导出命名空间,只要它已经通过模块导入(比如import * as ManagerBean from './api.ts',IDE可能自动帮你处理了这一步的隐式导入),就可以用import <别名> = <命名空间.成员>的语法,给命名空间内部的枚举创建一个模块级的别名,本质是简化长路径的引用。 - 这种语法是TS早期为兼容AMD/CommonJS模块系统和命名空间机制保留的特性,虽然现在更推荐使用ES标准的解构导入(比如
import { ManagerBean } from './api.ts'; const { ManagerRoleEnum } = ManagerBean),但TS至今仍支持这个语法。
如何用ESLint禁止这种自动导入行为?
你可以通过@typescript-eslint插件的no-import-equals规则来禁止这种TS特有的import =语法,步骤如下:
- 确保项目已安装
@typescript-eslint/eslint-plugin和@typescript-eslint/parser依赖 - 在ESLint配置文件(比如
.eslintrc.js)中添加规则:
module.exports = { parser: '@typescript-eslint/parser', plugins: ['@typescript-eslint'], rules: { '@typescript-eslint/no-import-equals': 'error' } }
启用这个规则后,ESLint会把import X = Y.Z这类代码标记为错误,IDE也就不会再自动生成这种导入方式了。
内容的提问来源于stack exchange,提问作者Artur Zybin
相关产品推荐
相关产品推荐

