元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
TypeScript环境准备
安装与配置
第一个TS程序
编译流程解析
▶
基础类型系统
类型注解语法
原始类型定义
数组与元组
接口与对象
▶
高级类型系统
泛型编程
条件类型
映射类型
类型推断
类型保护
高级类型工具
▶
函数开发
函数类型声明
可选参数与默认值
箭头函数应用
函数重载
泛型函数
▶
类与面向对象
类的定义
继承与修饰符
存取器使用
抽象类与接口
泛型类与抽象类
访问修饰符与属性
▶
模块化开发
模块导入导出
类型声明文件
命名空间
模块解析策略
▶
工程实践
tsconfig详解
常见编译选项
项目构建配置
代码组织最佳实践
单元测试
调试技巧
▶
常见问题
类型错误处理
类型断言技巧
类型兼容性
版本迁移指南
发布时间:
2025-03-31 09:21
↑
☰
# 接口与对象 TypeScript中的接口是一种强大的方式来定义对象的结构和契约。本文将详细介绍接口的定义和使用方法。 ## 接口基础 ### 基本接口定义 ```typescript // 定义一个基本接口 interface User { name: string; age: number; } // 使用接口 let user: User = { name: "TypeScript", age: 25 }; ``` ### 可选属性 ```typescript interface Config { color?: string; // 可选属性 width?: number; // 可选属性 height: number; // 必需属性 } // 使用可选属性 let config: Config = { height: 100 // 只提供必需属性 }; let fullConfig: Config = { color: "red", width: 200, height: 100 }; ``` ### 只读属性 ```typescript interface Point { readonly x: number; readonly y: number; } let point: Point = { x: 10, y: 20 }; // point.x = 5; // 错误:x是只读属性 ``` ## 函数类型接口 ### 函数接口定义 ```typescript // 定义函数类型接口 interface MathFunc { (x: number, y: number): number; } // 实现函数接口 let add: MathFunc = function(x: number, y: number): number { return x + y; }; let multiply: MathFunc = function(x: number, y: number): number { return x * y; }; ``` ### 可调用和可构造接口 ```typescript interface CallableInterface { (param: string): void; // 可调用 prefix: string; // 属性 log(text: string): void; // 方法 } interface ConstructableInterface { new (param: string): object; // 构造函数签名 } ``` ## 扩展接口 ### 接口继承 ```typescript // 基础接口 interface Animal { name: string; } // 扩展接口 interface Dog extends Animal { breed: string; } // 使用扩展接口 let dog: Dog = { name: "Rover", breed: "Labrador" }; ``` ### 多重继承 ```typescript interface Shape { color: string; } interface PenStroke { penWidth: number; } // 继承多个接口 interface Square extends Shape, PenStroke { sideLength: number; } let square: Square = { color: "blue", penWidth: 2, sideLength: 10 }; ``` ## 混合类型 ```typescript // 一个对象可以同时作为函数和对象使用 interface Counter { (start: number): string; // 函数 interval: number; // 属性 reset(): void; // 方法 } function getCounter(): Counter { let counter = function(start: number) { return start.toString(); } as Counter; counter.interval = 123; counter.reset = function() { }; return counter; } ``` ## 接口与类 ### 类实现接口 ```typescript interface Printable { print(): void; } class Document implements Printable { print() { console.log("Printing document..."); } } ``` ### 接口继承类 ```typescript class Control { private state: boolean; } // 接口继承类 interface SelectableControl extends Control { select(): void; } // 必须是Control的子类才能实现SelectableControl接口 class Button extends Control implements SelectableControl { select() { } } ``` ## 索引类型 ### 索引签名 ```typescript // 字符串索引 interface StringArray { [index: number]: string; // 数字索引返回字符串 } let myArray: StringArray = ["Bob", "Fred"]; // 混合索引 interface Dictionary { [key: string]: any; // 字符串索引 length: number; // 具体属性 } ``` ## 最佳实践 1. **使用接口定义对象结构**: ```typescript // 好的实践 interface UserConfig { name: string; preferences: { theme: string; notifications: boolean; }; } // 避免使用内联类型 function updateUser(config: UserConfig) { // ... } ``` 2. **接口命名约定**: ```typescript // 使用PascalCase命名接口 interface UserProfile { // ... } // 避免使用I前缀(除非团队规范要求) interface IUserProfile { // 不推荐 // ... } ``` 3. **合理使用可选属性**: ```typescript interface FormConfig { required: boolean; // 必需属性 maxLength?: number; // 真正可选的属性 validate?: () => boolean; // 可选的方法 } ``` ## 常见问题 1. **多余属性检查**: ```typescript interface User { name: string; } // 错误:对象字面量只能指定已知属性 let user: User = { name: "John", age: 30 // 错误:多余的属性 }; // 解决方案:使用类型断言或索引签名 interface FlexibleUser { name: string; [key: string]: any; } ``` 2. **接口合并**: ```typescript // 接口声明合并 interface Box { height: number; } interface Box { width: number; } // 等同于 interface Box { height: number; width: number; } ``` ## 下一步 掌握了接口和对象类型后,你可以: 1. 学习类的使用 2. 探索泛型接口 3. 实践面向接口编程 4. 了解高级类型系统特性 通过合理使用接口,你可以创建更加健壮和可维护的TypeScript代码。