typescript类型定义讲解
1. 基本类型定义
-
原始类型
let num: number = 42; // 数值类型 let str: string = "hello"; // 字符串类型 let bool: boolean = true; // 布尔类型 let n: null = null; // 空值 let u: undefined; // 未定义 let big: bigint = 100n; // 大整数类型 let sym: symbol = Symbol();// 唯一标识符
-
特殊类型
let anyVal: any = "anything"; // 任意类型(不推荐) let unknownVal: unknown = 42; // 未知类型(需类型检查) function error(): never { // 永不返回值的函数throw new Error(); } function log(): void { // 无返回值的函数console.log("void"); }
2. 复合类型
-
数组
let arr1: number[] = [1, 2]; // 字面量写法 let arr2: Array<string> = ["a"]; // 泛型写法
-
元组(Tuple)
let tuple: [string, number] = ["Alice", 30]; // 固定长度和类型 let optionalTuple: [number, boolean?] = [1]; // 可选元素
-
枚举(Enum)
enum Color { Red, Green = "green" } // 数字枚举或字符串枚举 const enum Direction { Up, Down } // 常量枚举(编译时内联)
3. 对象与接口
-
对象字面量
let obj: { name: string; age?: number } = { name: "Alice" }; // 可选属性
-
接口(Interface)
interface User {name: string;greet(): void; // 方法类型 }
-
索引签名与只读属性
interface DynamicObj {[key: string]: any; // 动态属性readonly id: number; // 只读属性 }
4. 函数类型
-
参数与返回值
function add(x: number, y: number): number { return x + y; } // 显式定义 const greet: (name: string) => string = (n) => `Hello ${n}`; // 箭头函数
-
可选参数与默认值
function buildName(first: string, last?: string = "Doe") { ... }
-
函数重载
function reverse(x: number): number; function reverse(x: string): string; function reverse(x: number | string) { ... }
5. 高级类型
-
联合类型(Union)
let value: string | number; // 可接受多种类型 type Status = "success" | "error"; // 字面量联合类型
-
交叉类型(Intersection)
type UserContact = User & Contact; // 合并多个类型
-
泛型(Generics)
function identity<T>(arg: T): T { return arg; } // 泛型函数 class Box<T> { value: T; } // 泛型类 interface Pair<K, V> { key: K; value: V; } // 泛型接口
-
类型别名(Type Alias)
type Point = { x: number; y: number }; type Callback = (data: string) => void;
6. 实用工具类型
-
内置工具类型
type PartialUser = Partial<User>; // 所有属性变为可选 type ReadonlyUser = Readonly<User>; // 所有属性变为只读 type UserNames = Pick<User, "name">; // 提取特定属性 type UserWithoutId = Omit<User, "id">; // 排除特定属性
-
条件类型与映射类型
type Nullable<T> = T | null; // 条件类型 type Stringify<T> = { [P in keyof T]: string }; // 映射类型
7. 类型操作
-
类型断言
let value: any = "hello"; let strLength: number = (<string>value).length; // 等效于 `value as string`
-
类型保护
if (typeof val === "string") { ... } // typeof 检查 if (error instanceof ApiError) { ... } // instanceof 检查