文章目录

TypeScript 模块:import 与 export 语法

发布于 2026-04-08 19:19:14 · 浏览 7 次 · 评论 0 条

TypeScript 模块系统是组织代码、复用逻辑的核心机制。通过 importexport 关键字,可以将代码拆分为多个文件,明确暴露和引入功能。以下指南将直接演示如何在项目中使用这些语法。


导出 (Export) 语法

导出操作决定了哪些变量、函数、类或接口可以被其他文件访问。TypeScript 提供了两种主要的导出方式:命名导出和默认导出。

1. 使用命名导出

命名导出允许一个文件导出多个变量或函数,导入时需要明确指定名称。

创建 一个名为 mathUtils.ts 的文件。

输入 以下代码,定义两个函数并分别导出:

// mathUtils.ts
export const PI = 3.14;

export function add(a: number, b: number): number {
    return a + b;
}

export function multiply(a: number, b: number): number {
    return a * b;
}

或者,在文件末尾统一列出需要导出的名称:

// mathUtils.ts
const PI = 3.14;

function add(a: number, b: number): number {
    return a + b;
}

// 集中导出
export { PI, add };

重命名 导出项(如果想要导出的名称与内部变量名不同):

// mathUtils.ts
function subtract(a: number, b: number): number {
    return a - b;
}

export { subtract as sub };

2. 使用默认导出

默认导出表示模块的主要功能,每个文件只能有一个默认导出。

创建 一个名为 Calculator.ts 的文件。

编写 类并使用 export default 导出:

// Calculator.ts
export default class Calculator {
    constructor(public value: number = 0) {}

    add(num: number) {
        this.value += num;
    }

    getResult() {
        return this.value;
    }
}

或者 直接导出一个值或函数:

// greet.ts
const defaultGreeting = "Hello World";
export default defaultGreeting;

导入 (Import) 语法

导入操作用于将其他模块导出的功能引入到当前文件中。

1. 导入命名导出

对于使用 export 导出的内容,必须使用 {} 包裹 exact 名称。

创建 一个名为 main.ts 的文件。

输入 以下代码从 mathUtils.ts 导入特定功能:

// main.ts
import { PI, add } from './mathUtils';

console.log(PI); // 输出: 3.14
console.log(add(2, 3)); // 输出: 5

重命名 导入项(解决名称冲突问题):

// main.ts
import { add as sumNumbers } from './mathUtils';

console.log(sumNumbers(10, 20));

导入 所有导出内容到一个对象命名空间:

// main.ts
import * as MathUtils from './mathUtils';

console.log(MathUtils.PI);
console.log(MathUtils.add(5, 5));

2. 导入默认导出

导入默认导出时,不需要使用 {},且可以自定义名称。

main.ts 中添加以下代码:

// main.ts
import Calculator from './Calculator';

const calc = new Calculator(10);
calc.add(5);
console.log(calc.getResult()); // 输出: 15

3. 混合导入

如果一个模块同时包含命名导出和默认导出,可以一次性导入。

假设 utils.ts 内容如下:

// utils.ts
export default function defaultFunc() {
    console.log("I am default");
}

export const helper = "I am helper";

使用 以下语法在 main.ts 中导入:

// main.ts
import defaultFunc, { helper } from './utils';

defaultFunc();
console.log(helper);

TypeScript 特有的导入与导出

TypeScript 扩展了模块语法,增加了对类型的导入导出支持。

1. 导入类型

在 TypeScript 5.0 之前,导入类型建议使用 import type 以确保编译器在生成 JavaScript 时完全移除该导入。虽然新版本已经可以自动推断,但显式声明依然是好习惯。

假设 存在类型定义文件 types.ts

// types.ts
export interface User {
    id: number;
    name: string;
}

使用 import type 仅导入类型:

// main.ts
import type { User } from './types';

const u: User = { id: 1, name: "Alice" };

2. 导出类型

直接 导出接口或类型别名:

// types.ts
export interface Config {
    debug: boolean;
}

export type ID = string | number;

导出与导入对比表

下表总结了不同导出方式对应的导入语法。

导出语法 导入语法 说明
export const myVar = 1; import { myVar } from './file'; 命名导出,必须精确匹配名称
export { myVar as alias }; import { myVar as alias } from './file'; 导入导出均可重命名
export default class MyClass {} import MyClass from './file'; 默认导出,自定义名称,无花括号
export const a = 1; <br> export default class {} import MyClass, { a } from './file'; 混合导入,默认在前,命名在后

模块路径解析

在引用模块时,路径的写法决定了查找方式。

1. 相对路径

用于 引用项目内部的其他文件。必须以 ./(当前目录)或 ../(上一级目录)开头。

import { Tool } from './utils/Tool';
import { Config } from '../config';

2. 绝对路径 (非 node_modules)

通常 需要在 tsconfig.json 中配置 baseUrlpaths

打开 tsconfig.json

配置 compilerOptions

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  }
}

使用 别名导入:

import { User } from '@/types/user';

3. 模块名

用于 引用 node_modules 中的第三方库(如 lodash, react),直接写包名。

import { cloneDeep } from 'lodash';

重新导出 (Re-export)

有时我们希望在一个“聚合文件”中统一管理多个模块的导出,以便其他地方只需引入这一个文件。

创建 一个 index.ts 文件。

使用 export ... from ... 语法:

// index.ts
// 重新导出 mathUtils 中的命名导出
export { PI, add, multiply } from './mathUtils';

// 重新导出 Calculator 的默认导出,并将其重命名
export { default as Calc } from './Calculator';

现在,其他文件可以直接从 index.ts 导入:

// main.ts
import { PI, Calc } from './index';

这层隔离允许你在不修改引用路径的情况下,调整内部文件结构。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文