Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
# 第4章:对象与接口

## 对象类型基础

### 1. 对象类型的定义
在 TypeScript 中,对象类型用于描述一个对象的结构,包括其属性和方法。可以通过直接声明或接口(Interface)来定义对象类型。

```typescript
// 直接声明对象类型
let user: {
  name: string;
  age: number;
  isActive: boolean;
};

// 初始化对象
user = {
  name: "Alice",
  age: 30,
  isActive: true,
};

2. 对象属性的类型

对象属性可以是以下类型:

  • 基本类型:string、number、boolean 等。
  • 复合类型:数组、其他对象、函数等。
  • 可选属性:通过 ? 标记属性为可选。
let book: {
  title: string;
  author?: string; // 可选属性
  pages: number;
  tags: string[]; // 数组类型
};

book = {
  title: "TypeScript Handbook",
  pages: 200,
  tags: ["programming", "typescript"],
};

3. 对象方法的类型

对象可以包含方法,方法的类型可以通过函数签名定义。

let calculator: {
  add: (x: number, y: number) => number;
  subtract: (x: number, y: number) => number;
};

calculator = {
  add: (x, y) => x + y,
  subtract: (x, y) => x - y,
};

4. 只读属性

通过 readonly 关键字可以标记属性为只读,初始化后不可修改。

let config: {
  readonly apiUrl: string;
  maxRetries: number;
};

config = {
  apiUrl: "https://api.example.com",
  maxRetries: 3,
};

// config.apiUrl = "new-url"; // 错误:无法修改只读属性

5. 动态属性与索引签名

如果对象的属性名是动态的,可以使用索引签名(Index Signature)定义。

let dynamicObject: {
  [key: string]: number | string; // 键是字符串,值是 number 或 string
};

dynamicObject = {
  score: 100,
  name: "Bob",
  age: 25, // 允许,因为 age 是 number
};

6. 类型检查与错误示例

TypeScript 会对对象类型进行严格检查,以下是一个错误示例:

let invalidUser: {
  name: string;
  age: number;
};

invalidUser = {
  name: "Charlie",
  // 错误:缺少 age 属性
};

7. 实际应用场景

对象类型常用于:

  • 定义 API 返回的数据结构。
  • 描述配置对象的形状。
  • 作为函数的参数或返回值类型。
function printUserInfo(user: { name: string; age: number }) {
  console.log(`Name: ${user.name}, Age: ${user.age}`);
}

printUserInfo({ name: "Dave", age: 40 });

总结

对象类型是 TypeScript 的核心特性之一,通过明确对象的属性和方法类型,可以显著提高代码的可读性和安全性。后续章节将介绍如何通过接口(Interface)进一步优化对象类型的定义。

Last Updated:: 3/27/25, 10:50 AM