在创建JavaScript模块时,export语句用于从模块中导出实时绑定的函数、对象或者原始值,以便其他程序可以通过import语句使用它们。在使用import进行导入时,这些绑定值只能被导入模块锁读取,但在export导出模块中对这些绑定值进行修改,所修改的值也会实时更新。
无论你是是否声明,导出的模块都处于严格模式。
export语句不能使用在嵌入式脚本中。
一、存在两种export导出方式:
- 默认导出(多个)
- 命名导出(单个)
//导出单个特性
export let a, b, c;
export function FunctionName(){ //code }
export class ClassName(){ //code }
//导出列表
export {
a,
b,
//...code
}
//重命名导出
export {
a as renameA,
b as renameB,
//...code
}
//结构导出重命名
export const { a, b: renameB } = ab
//默认导出
export default FunctionName;
export default (){ //code }
export default function abc(){ //code }
//导出模块合集
export * from 'pathFileName'
export * as rename from 'pathFileName'
export { a, b, c } from 'pathFileName'
你能够在每一个模块中定义多个命名导出,但是只允许有一个默认导出。
// 导出事先定义的特性
export { myFunction, myVariable };
// 导出单个特性(可以导出var,let,const,function,class)
export let myVariable = Math.sqrt(2);
export function myFunction() { //code };
// 导出事先定义的特性作为默认值
export { myFunction as default };
// 导出单个特性作为默认值
export default function () { //code }
export default class { //code }
// 每个导出都覆盖前一个导出
命名导出在导入期间,必须使用相应对象的相同名称。但是可以使用任何名称导入默认导出。
//你也可以重命名命名导出以避免命名冲突
export {
myFunction as function1,
myVariable as variable
};
// 文件 test.js
let k; export default k = 12;
// 另一个文件
import m from './test'; // 由于 k 是默认导出,所以可以自由使用 import m 替代 import k
console.log(m); // 输出为 12
常见示例
//模块重定向,比较常见
// A文件夹的index文件
export const functionNamea1 = (...)=> { //code }
export function functionNamea2 (...){ //code }
//B文件夹的index文件
export function functionNameb1(...){ //code }
export function functionNameb2(...){ //code }
//当前文件夹的index文件,例如为box.ts
export * from './A';
export * from './B'
//需要使用A或者B模块的文件
import { functionNamea1, functionNamea2, functionNameb1, functionNameb2 } from '文件路径,box.ts'
// use A module or B module code