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章:对象与接口

第4章:对象与接口

可选属性与只读属性

可选属性(Optional Properties)

在 TypeScript 中,接口的属性可以通过添加 ? 标记为可选属性。这意味着该属性可以存在,也可以不存在,而不会引发类型错误。

语法示例:

interface User {
    name: string;
    age?: number; // 可选属性
}

const user1: User = { name: "Alice" }; // 合法,age 可省略
const user2: User = { name: "Bob", age: 30 }; // 合法

应用场景:

  • 处理动态数据(如 API 返回的字段可能缺失)。
  • 实现灵活的配置对象。

注意事项:

  • 访问可选属性时需检查是否存在,避免运行时错误:
    if (user1.age !== undefined) {
        console.log(user1.age.toFixed(2));
    }
    

只读属性(Readonly Properties)

通过 readonly 修饰符可以将属性标记为只读,禁止在初始化后重新赋值。

语法示例:

interface Point {
    readonly x: number;
    readonly y: number;
}

const p: Point = { x: 10, y: 20 };
p.x = 5; // 编译错误:无法分配到 "x",因为它是只读属性

应用场景:

  • 定义不可变的数据结构(如配置、常量)。
  • 与 const 声明结合使用,确保引用和属性均不可变。

扩展知识:

  • 只读数组:ReadonlyArray<T> 类型禁止修改数组内容:
    const nums: ReadonlyArray<number> = [1, 2, 3];
    nums.push(4); // 编译错误:push 方法不存在
    

可选与只读的联合使用

可以同时为属性添加 readonly 和 ?,表示该属性可省略且一旦赋值不可更改。

示例:

interface Config {
    readonly id?: string;
    timeout: number;
}

const config: Config = { timeout: 1000 };
config.id = "abc"; // 编译错误(如果 id 已赋值则不可修改)

总结表格

特性语法用途注意事项
可选属性property?: type允许属性缺失需运行时检查是否存在
只读属性readonly property: type防止属性被重新赋值仅限制编译时,运行时仍可修改(需配合工具)
Last Updated:: 3/27/25, 10:50 AM