对象类型
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'
} // ✅ okts
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]; // ✅