typescript基础详解

TypeScript 基础详解(2026 年小白友好版)

TypeScript(简称 TS)是 JavaScript 的超集,由 Microsoft 开发并开源(最新稳定版 5.3+,2026 年已到 5.4+)。它在 JS 基础上添加了静态类型系统,让代码更安全、更易维护、更适合大规模项目。

一句话核心价值:

TS = JS + 类型检查(编译时就发现错误,而不是运行时崩溃)。

为什么学 TS(2026 年趋势)

  • 前端框架(如 React、Vue、Angular)几乎全用 TS。
  • 后端 Node.js 项目(如 Express/NestJS)也标配 TS。
  • 错误早发现、IDE 智能提示强(VS Code 天生支持)。
  • 兼容所有 JS 代码(TS 编译后就是纯 JS)。

如果你是 JS 基础选手,TS 入门只需 1–2 天;零基础先补 JS。

1. 环境准备(5 分钟上手)

  1. 安装 Node.js(TS 依赖它):
    官网 nodejs.org 下载 LTS 版(2026 年 ≥ 20.x)。安装后验证:
   node -v    # ≥ 20.0.0
   npm -v     # ≥ 10.0.0
  1. 全局安装 TypeScript
   npm install -g typescript
   tsc -v     # 验证版本 ≥ 5.3.3
  1. 编辑器:VS Code(内置 TS 支持)+ 插件:TypeScript Extension Pack。
    新建 hello.ts 文件,VS Code 自动高亮/提示。
  2. 编译运行
   tsc hello.ts    # 编译成 hello.js
   node hello.js   # 运行

自动监听(开发推荐):

   npm install -g ts-node ts-node-dev
   ts-node-dev --respawn hello.ts   # 保存自动重载

2. 基本语法(从 JS 到 TS 的升级)

TS 代码以 .ts 结尾,所有 JS 代码在 TS 中直接有效。

2.1 变量声明与基本类型

类型语法示例说明常见场景
布尔let isDone: boolean = false;true/false条件判断
数字let count: number = 42;整数/浮点/NaN/Infinity计算
字符串let name: string = "Alice";支持模板字符串 ${expr}文本处理
数组let list: number[] = [1, 2, 3];
let list: Array<string> = ["a", "b"];
两种写法等价列表数据
元组let tuple: [string, number] = ["age", 28];固定长度/类型多值返回
枚举enum Color {Red = 1, Green, Blue};
let c: Color = Color.Green;
常量集合状态码/选项
Anylet notSure: any = 4; notSure = "maybe";任意类型(禁用类型检查)迁移旧 JS / 未知数据
Voidfunction warn(): void { console.log("!"); }无返回值无返回函数
Null/Undefinedlet u: undefined = undefined;常用于可选参数空值处理
Neverfunction error(msg: string): never { throw new Error(msg); }永不返回(抛错/死循环)错误处理

代码示例(类型推断 + 显式类型):

// 类型推断(推荐,TS 自动猜)
let age = 28;  // TS 知道是 number
age = "twenty-eight";  // 编译报错!

// 显式类型(复杂时用)
let score: number | string = 95;  // union 类型(或)
score = "A+";  // OK

2.2 函数

  • 基本定义
  function add(x: number, y: number): number {
      return x + y;
  }

  // 箭头函数
  const multiply = (x: number, y: number): number => x * y;
  • 可选/默认参数
  function greet(name: string, greeting?: string): string {  // ? = 可选
      return `${greeting || "Hello"}, ${name}`;
  }

  greet("Bob");  // Hello, Bob
  • 函数重载(overload):
  function pickCard(x: number): { suit: string; card: number };
  function pickCard(x: string): number;
  function pickCard(x: any): any { /* 实现 */ }

2.3 接口(Interface) —— 定义对象形状

interface User {
    name: string;
    age: number;
    email?: string;  // 可选
    readonly id: number;  // 只读
}

let user: User = { name: "Alice", age: 28, id: 1 };
user.age = 29;  // OK
user.id = 2;    // 报错!readonly
  • 函数类型
  interface SearchFunc {
      (source: string, subString: string): boolean;
  }
  let mySearch: SearchFunc = function(src, sub) { return src.includes(sub); };
  • 扩展接口
  interface Admin extends User {
      role: string;
  }

2.4 类(Class) —— 面向对象基础

class Animal {
    private name: string;  // 私有(外部不可访问)
    constructor(theName: string) { this.name = theName; }

    move(distance: number = 0) {  // 默认参数
        console.log(`${this.name} moved ${distance}m.`);
    }
}

class Dog extends Animal {
    bark() { console.log("Woof!"); }
}

const dog = new Dog("Buddy");
dog.move(10);  // Buddy moved 10m.
dog.bark();    // Woof!
  • 访问修饰符:public(默认)、private、protected。
  • 抽象类abstract class Base { abstract method(); }

2.5 泛型(Generics) —— 复用类型

function identity<T>(arg: T): T {  // T 是类型变量
    return arg;
}

identity<string>("hello");  // 指定 T 为 string
identity(42);               // 推断为 number
  • 泛型接口/类
  interface GenericIdentityFn<T> {
      (arg: T): T;
  }

3. 高级基础(快速上手)

  • 模块与命名空间
  // math.ts
  export function add(x: number, y: number) { return x + y; }

  // main.ts
  import { add } from "./math";
  console.log(add(1, 2));
  • 类型断言(as)
  let someValue: any = "this is a string";
  let strLength: number = (someValue as string).length;  // 告诉 TS “我确定是 string”
  • 类型守卫
  function isString(x: any): x is string {  // 类型谓词
      return typeof x === "string";
  }
  • 装饰器(高级,但 React 等常用):
    需要 tsconfig.json 中开启 "experimentalDecorators": true
  function sealed(constructor: Function) { /* ... */ }
  @sealed
  class Greeter { /* ... */ }

4. 配置 tsconfig.json(项目必备)

新建项目时运行 tsc --init,然后修改:

{
  "compilerOptions": {
    "target": "ES2022",      // 输出 JS 版本
    "module": "ESNext",      // 模块系统
    "strict": true,          // 严格模式(推荐)
    "outDir": "./dist",      // 输出目录
    "rootDir": "./src"       // 源目录
  }
}

编译整个项目:tsc(无参数,自动用 tsconfig)。

5. 常见面试/进阶问题

问题答案要点
TS vs JS 最大区别?静态类型 vs 动态类型;TS 编译时检查,JS 运行时。
any 和 unknown 的区别?any 禁用类型检查;unknown 必须先检查/断言才能用(更安全)。
interface vs type?interface 可扩展/合并;type 支持联合/交叉/条件类型(更灵活)。
TS 如何处理 null/undefined?“strictNullChecks”: true 时,必须显式处理(? 或 !)。
泛型约束?<T extends number>(T 必须是 number 子类型)。

6. 总结口诀 & 练习建议

  • 口诀:变量加类型,函数标返回,接口定形状,泛型复用强。
  • 练习
  1. 用 TS 重写一个 JS 函数,加类型/接口。
  2. 建一个简单项目:类 + 继承 + 泛型数组排序。
  3. 读官网 10 分钟教程:typescriptlang.org/docs/handbook/typescript-tooling-in-5-minutes.html

TS 让代码从“随意”变“严谨”,上手后你会爱上它的提示和安全感~

有哪部分想再深入?如 React + TS、泛型高级、tsconfig 调优 等?告诉我,我继续展开!

文章已创建 3958

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部