<p>as关键字用于ES模块中重命名导入或导出的标识符以避免命名冲突,支持导入重命名(如import {init as apiInit})、导出重命名(如export {_internalHelper as helper})、批量命名空间导入(import * as api),但不可对default使用as,且同一模块不能重复导入同一名称。</p>

ES Module 中的 as 关键字主要用于重命名导入或导出的标识符,从而避免命名冲突——比如多个模块导出同名变量、函数,或与当前作用域已有名称撞车时,用 as 给它们起个新“小名”即可。
导入时用 as 重命名避免冲突
当从不同模块导入同名导出(如都叫 defaultConfig 或 init),直接解构或命名导入会报错。这时在导入语句里用 as 指定别名:
import { init as apiInit } from './api.js';import { init as uiInit } from './ui.js';- 这样就能同时使用
apiInit()和uiInit(),互不干扰 - 也支持默认导入重命名:
import React from 'react';等价于import React as default from 'react';(语法合法但不常用)
导出时用 as 重命名暴露接口
模块内部变量名可能不适宜对外暴露(比如太长、含下划线、或与保留字相近),可用 export ... as ... 在导出时改名:
const _internalHelper = () => {}; export { _internalHelper as helper };-
export { defaultConfig as config, validateInput as check } from './utils.js';(重导出时也能用 as) - 注意:不能对
default使用as,因为export default本身就是一个独立语法,不是命名导出
搭配 * as namespace 解决批量命名冲突
当大量导入且担心重名,可用命名空间方式统一前缀:
立即学习“Java免费学习笔记(深入)”;
-
import * as api from './api.js';→ 调用api.init()、api.fetch() -
import * as utils from './utils.js';→ 调用utils.merge()、utils.delay() - 这种方式天然隔离作用域,比逐个
as更适合大型模块组合
常见误区提醒
几个容易踩坑的地方:
-
as只作用于导入/导出语句本身,不影响原模块内部变量名 - 不能写成
import { foo as bar, foo as baz }—— 同一模块里不能重复导入同一名称(即使重命名也不行) -
export { a, b as c };是合法的,但export { a as a }没有意义,也不会报错,只是冗余 - TypeScript 中类型导入也可用
as,例如import type { Options as CliOptions } from './cli';


















