在 TypeScript 和 ES6 中,export 和 export default 是用来导出模块成员的两种不同方式。理解它们的区别对于模块化编程非常重要。以下是详细的解释:
export
export 关键字用于导出模块中的多个成员(如变量、函数、类、接口等)。使用 export 导出的成员在导入时需要使用与导出时相同的名称,或使用 as 关键字重命名。
示例
// math.tsexport const PI = 3.14;export function add(a: number, b: number): number {return a + b;}export class Calculator {multiply(a: number, b: number): number {return a * b;}}// app.tsimport { PI, add, Calculator } from './math';console.log(PI); // 3.14console.log(add(2, 3)); // 5const calc = new Calculator();console.log(calc.multiply(2, 3)); // 6
使用 as 重命名
// app.tsimport { PI as PiValue, add as sum, Calculator } from './math';console.log(PiValue); // 3.14console.log(sum(2, 3)); // 5
export default
export default 用于导出模块中的单个默认成员。每个模块只能有一个默认导出。使用 export default 导出的成员在导入时可以使用任意名称,不需要与导出时的名称相同。
示例
// logger.tsexport default function log(message: string): void {console.log(message);}// app.tsimport log from './logger';log('This is a default export log message.');
与命名导出的组合
你可以在同一个模块中同时使用 export default 和 export 来导出默认成员和命名成员。
// utils.tsexport default function log(message: string): void {console.log(message);}export const PI = 3.14;export function add(a: number, b: number): number {return a + b;}// app.tsimport log, { PI, add } from './utils';log('This is a default export log message.');console.log(PI); // 3.14console.log(add(2, 3)); // 5
区别总结
数量限制:
export:可以导出多个成员。export default:每个模块只能有一个默认导出。
导入方式:
export:导入时需要使用花括号{}并且名称需要匹配,或使用as重命名。export default:导入时不需要花括号,可以使用任意名称。
使用场景:
export:适用于导出多个命名成员的情况。export default:适用于导出单个主成员或模块的核心成员的情况。
例子对比
使用 export 导出多个成员
// math.tsexport const PI = 3.14;export function add(a: number, b: number): number {return a + b;}// app.tsimport { PI, add } from './math';console.log(PI); // 3.14console.log(add(2, 3)); // 5
使用 export default 导出单个主成员
// logger.tsexport default function log(message: string): void {console.log(message);}// app.tsimport log from './logger';log('This is a default export log message.');
组合使用
// utils.tsexport default function log(message: string): void {console.log(message);}export const PI = 3.14;export function add(a: number, b: number): number {return a + b;}// app.tsimport log, { PI, add } from './utils';log('This is a default export log message.');console.log(PI); // 3.14console.log(add(2, 3)); // 5
