TypeScript 基础类型

TypeScript 基础类型详解

TypeScript 的类型系统是其核心优势,它提供了比 JavaScript 更严格、更安全的类型检查。以下是 TypeScript 中最常用的基础类型(primitive types 和常用组合类型),全部基于 TypeScript 5.x 版本。

1. 基本原始类型(Primitives)

类型描述示例代码说明
boolean布尔值let isActive: boolean = true;只有 truefalse
number数字(包括整数、浮点数)let age: number = 30;
let pi: number = 3.14;
支持 NaNInfinity
bigint大整数(ES2020+)let big: bigint = 100n;末尾加 n
string字符串let name: string = "Alice";
let greeting: string =Hi ${name};
支持模板字符串
undefined未定义let u: undefined = undefined;严格模式下需注意
null空值let n: null = null;undefined 不同
symbol唯一标识符let sym: symbol = Symbol("id");常用于对象属性键

2. any 类型(万能类型)

let anything: any = 4;
anything = "string";     // 任意类型都可赋值
anything = true;         // 不会报错
anything.bark();         // 也不会报错(但运行时可能出错)

注意any 会关闭类型检查,不推荐滥用。尽量使用 unknown 替代。

3. unknown 类型(更安全的 any)

let unknownValue: unknown = 4;

// unknownValue.toFixed();  // 错误:必须先检查类型
if (typeof unknownValue === "number") {
  console.log(unknownValue.toFixed(2));  // OK
}

unknown 强制你进行类型检查或断言,安全性远高于 any

4. 数组类型(Array)

两种写法等价:

let numbers1: number[] = [1, 2, 3];         // 推荐
let numbers2: Array<number> = [1, 2, 3];    // 泛型写法

只读数组:

let readonlyArr: ReadonlyArray<number> = [1, 2, 3];
// readonlyArr.push(4);  // 错误:只读

5. 元组类型(Tuple)

固定长度、固定类型顺序的数组:

let person: [string, number] = ["Alice", 30];
// person[2] = "extra";  // 错误:长度固定

// 可选元素(TS 4.0+)
let optionalTuple: [string, number?] = ["Bob"];

6. 对象类型(Object)

推荐使用 interfacetype 定义对象结构:

// 使用 interface
interface User {
  name: string;
  age: number;
  isAdmin?: boolean;       // 可选
  readonly id: number;     // 只读
}

let user: User = {
  name: "Charlie",
  age: 28,
  id: 1
};

// 使用 type(更灵活)
type Point = {
  x: number;
  y: number;
};

let p: Point = { x: 10, y: 20 };

7. 联合类型(Union Types)

一个值可以是多种类型之一:

let id: string | number = 123;
id = "abc";  // OK

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

8. 字面量类型(Literal Types)

限制值为具体字面量:

type Status = "success" | "error" | "loading";
let state: Status = "success";  // 只能是这三个值

type YesNo = true | false;
type Zero = 0;

9. 枚举(Enums)

定义一组命名常量:

enum Direction {
  Up,     // 默认 0
  Down,   // 1
  Left,   // 2
  Right   // 3
}

let dir: Direction = Direction.Up;
console.log(Direction[0]);  // "Up"(反向映射)

字符串枚举(推荐):

enum Color {
  Red = "RED",
  Green = "GREEN",
  Blue = "BLUE"
}

10. void 类型

表示函数无返回值:

function log(message: string): void {
  console.log(message);
}

11. never 类型

表示永远不会正常返回:

function throwError(msg: string): never {
  throw new Error(msg);
}

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

12. 内置实用类型(Utility Types)——常用基础工具

类型作用示例
Partial<T>所有属性变为可选Partial<User>
Required<T>所有属性变为必选Required<User>
Readonly<T>所有属性变为只读Readonly<User>
Pick<T, K>挑选部分属性Pick<User, "name" | "age">
Omit<T, K>排除部分属性Omit<User, "id">
Record<K, T>创建键值类型对象Record<string, number>

小结:常用类型速查

场景推荐类型写法
数字number
字符串string
布尔boolean
数组T[]Array<T>
对象interfacetype
多种可能A | B
固定值"success" | "error"
无返回值函数void
永远不返回never
任意类型(谨慎)unknown(推荐) > any

如果您想深入某个类型(如泛型、交叉类型、类型守卫、条件类型等),或者需要具体示例代码,请告诉我!

文章已创建 3383

发表回复

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

相关文章

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

返回顶部