Skip to content

对象类型

  • object:非原始类型
  • Array<T>T[]:数组
  • Tuple:元组,例如 [string, number]
  • enum:枚举
  • class:类
  • interface:接口
  • type:类型别名

interface

对象属性

ts
interface User {
  id: number
  name: string
  email?: string            // 可选
  readonly cb:()=>boolean  // 只读
}
  • ?:属性可缺省(也可能是 undefined

  • readonly:编译期禁止修改,常用于修饰函数或者id

索引签名(动态键)

当对象的键不固定时,可以用索引签名来约束键和值的类型。

ts
interface NumberDict {
  [key: string]: number   // 任意字符串键 → number
}

const scores: NumberDict = {
  math: 95,
  english: 88,
  history: 76,
}

索引签名会约束所有属性

ts
interface UserDict {
  [key: string]: string
  id: number  // ❌ 报错:不兼容 string
}

解决方案:

ts
interface UserDict {
  [key: string]: any   // 统一到兼容类型
  id: number
  name:string
}

interface重名【声明合并(Declaration Merging)】

两个(或多个)同名 interface 会被编译器合并成一个:

ts
interface User {
  id: number
}

interface User {
  name: string
}

const u: User = {
  id: 1,
  name: 'Alice'
} // ✅ ok
ts
interface User {
  id: number
  name: string
}

Array

Tuple

定义:元组是一种特殊的数组类型,用于表示已知元素数量和类型的数组

与普通数组不同,普通数组元素类型可以相同且数量不固定,而元组可以指定每个位置的类型。

ts
let tuple: [string, number];
tuple = ["Alice", 25]; // ✅
tuple = [25, "Alice"]; // ❌ 类型错误
tuple = ["Bob"];       // ❌ 数量不匹配

可选元素:

ts
let tuple: [string, number?];

tuple = ["Alice"];      // ✅ 第二个元素可省略
tuple = ["Alice", 30];  // ✅

type