技术文档中心
首页
React
Vue
TypeScript
Kotlin
React Native
Electron
Android
首页
React
Vue
TypeScript
Kotlin
React Native
Electron
Android
  • 基础入门

    • TypeScript 学习指南
    • 基础类型
    • 函数
    • 接口
    • 类
  • 进阶内容

    • 泛型
    • 高级类型
    • 工具类型
    • 装饰器
    • 模块
  • 实战应用

    • 配置文件
    • 实战应用

TypeScript 学习指南

什么是 TypeScript

TypeScript 是 JavaScript 的超集,添加了静态类型系统。由 Microsoft 开发维护。

核心特点

  • 静态类型检查:编译时发现错误
  • 智能提示:更好的 IDE 支持
  • 面向对象:类、接口、泛型等
  • 兼容 JavaScript:渐进式采用

安装

# 全局安装
yarn global add typescript

# 项目安装
yarn add -D typescript

# 查看版本
tsc --version

初始化项目

# 生成 tsconfig.json
tsc --init

# 编译 TypeScript
tsc index.ts

# 监听模式
tsc --watch

第一个程序

// hello.ts
function greet(name: string): string {
  return `Hello, ${name}!`;
}

const message = greet('TypeScript');
console.log(message);
# 编译
tsc hello.ts

# 运行
node hello.js

使用 ts-node

# 安装
yarn add -D ts-node

# 直接运行
ts-node hello.ts

基础类型

原始类型

// 字符串
let name: string = 'John';

// 数字
let age: number = 25;

// 布尔值
let isActive: boolean = true;

// null 和 undefined
let n: null = null;
let u: undefined = undefined;

// symbol
let sym: symbol = Symbol('key');

// bigint
let big: bigint = 100n;

数组

// 方式1
let numbers: number[] = [1, 2, 3];

// 方式2
let strings: Array<string> = ['a', 'b', 'c'];

// 只读数组
let readonlyArr: readonly number[] = [1, 2, 3];

元组

// 固定长度和类型
let tuple: [string, number] = ['John', 25];

// 可选元素
let optionalTuple: [string, number?] = ['John'];

// 剩余元素
let restTuple: [string, ...number[]] = ['John', 1, 2, 3];

枚举

// 数字枚举
enum Direction {
  Up,      // 0
  Down,    // 1
  Left,    // 2
  Right    // 3
}

let dir: Direction = Direction.Up;

// 字符串枚举
enum Status {
  Success = 'SUCCESS',
  Error = 'ERROR',
  Pending = 'PENDING'
}

// 常量枚举
const enum Color {
  Red,
  Green,
  Blue
}

any 和 unknown

// any:关闭类型检查
let value: any = 'hello';
value = 123;
value.foo(); // 不报错

// unknown:类型安全的 any
let val: unknown = 'hello';
// val.toUpperCase(); // 报错

// 需要类型检查
if (typeof val === 'string') {
  val.toUpperCase(); // 正确
}

void 和 never

// void:无返回值
function log(message: string): void {
  console.log(message);
}

// never:永不返回
function throwError(message: string): never {
  throw new Error(message);
}

function infiniteLoop(): never {
  while (true) {}
}

类型推断

// 自动推断为 number
let num = 123;

// 自动推断为 string[]
let arr = ['a', 'b', 'c'];

// 自动推断返回值类型
function add(a: number, b: number) {
  return a + b; // 推断为 number
}

类型断言

// 方式1:as
let value: unknown = 'hello';
let length = (value as string).length;

// 方式2:尖括号(JSX 中不可用)
let len = (<string>value).length;

// 非空断言
let name: string | null = getName();
let upper = name!.toUpperCase();

联合类型和交叉类型

// 联合类型
let value: string | number;
value = 'hello';
value = 123;

function print(id: string | number) {
  if (typeof id === 'string') {
    console.log(id.toUpperCase());
  } else {
    console.log(id.toFixed(2));
  }
}

// 交叉类型
interface Person {
  name: string;
}

interface Employee {
  id: number;
}

type Staff = Person & Employee;

let staff: Staff = {
  name: 'John',
  id: 1001
};

字面量类型

// 字符串字面量
let direction: 'left' | 'right' | 'up' | 'down';
direction = 'left'; // 正确
// direction = 'center'; // 错误

// 数字字面量
let dice: 1 | 2 | 3 | 4 | 5 | 6;

// 布尔字面量
let success: true;

类型别名

// 基础类型别名
type ID = string | number;

// 对象类型别名
type User = {
  id: ID;
  name: string;
  age: number;
};

// 函数类型别名
type Callback = (data: string) => void;

学习路径

  1. 基础类型 → 掌握所有基本类型
  2. 接口和类型 → 定义复杂数据结构
  3. 函数 → 函数类型和重载
  4. 类 → 面向对象编程
  5. 泛型 → 编写可复用代码
  6. 高级类型 → 条件类型、映射类型
  7. 装饰器 → 元编程
  8. 模块 → 代码组织
  9. 实战 → 配合 React/Vue 使用

配置文件

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "ESNext",
    "lib": ["ES2020", "DOM"],
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true
  },
  "include": ["src"],
  "exclude": ["node_modules"]
}
最近更新: 2026/2/6 15:39
Contributors: hailong
Next
基础类型