首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 1 章 准备知识
1.1 前端技术简介
1.2 HTML入门
1.2.1 准备开发工具
1.2.2 HTML中的基础标签
1.3 CSS入门
1.3.1 CSS选择器入门
1.3.2 CSS样式入门
1.4 JavaScript入门
1.4.1 我们为什么需要JavaScript
1.4.2 JavaScript语法简介
1.4.3 从JavaScript到TypeScript
1.5 渐进式开发框架Vue
1.5.1 第一个Vue应用
1.5.2 范例:一个简单的用户登录页面
1.5.3 Vue 3的新特性
1.5.4 我们为什么要使用Vue框架
第 2 章 TypeScript基础
2.1 重新认识TypeScript
2.1.1 安装TypeScript
2.1.2 TypeScript语言版本的HelloWorld程序
2.1.3 使用高级IDE工具
2.2 TypeScript中的基本类型
2.2.1 布尔、数值与字符串
2.2.2 特殊的空值类型
2.2.3 数组与元组
2.3 TypeScript中有关类型的高级内容
2.3.1 枚举类型
2.3.2 枚举的编译原理
2.3.3 any、never与object类型
2.3.4 关于类型断言
2.4 函数的声明和定义
2.4.1 函数的类型
2.4.2 可选参数、默认参数和不定个数参数
2.4.3 函数的重载
第 3 章 TypeScript中的面向对象编程
3.1 理解与应用“类”
3.1.1 类的定义与继承
3.1.2 类的访问权限控制
3.1.3 只读属性与存取器
3.1.4 关于静态属性与抽象类
3.1.5 类的实现原理
3.2 接口的应用
3.2.1 接口的定义
3.2.2 使用接口约定函数和可索引类型
3.2.3 使用接口来约束类
3.2.4 接口的继承
3.3 TypeScript中的类型推断与高级类型
3.3.1 关于类型推断
3.3.2 联合类型与交叉类型
3.3.3 TypeScript的类型区分能力
3.3.4 字面量类型与类型别名
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(一)
小册名称:TypeScript和Vue从入门到精通(一)
### 3.2.2 使用接口约定函数和可索引类型 在TypeScript的世界中,接口(Interfaces)是定义对象形状和类型的强大工具。它们不仅限于描述对象的属性,还能用来约束函数的参数、返回值以及更复杂的类型结构,如可索引类型。本章节将深入探讨如何使用接口来约定函数的形状以及定义可索引类型的结构,从而使你的TypeScript代码更加健壮、易于理解和维护。 #### 3.2.2.1 函数类型接口 在TypeScript中,函数是一种特殊的对象,它们同样可以拥有类型。使用接口来定义函数类型,可以明确指定函数的参数类型、参数个数以及返回值的类型,从而提供额外的类型检查和自动补全功能。 ##### 定义函数类型接口 ```typescript interface SearchFunc { (source: string, subString: string): boolean; } // 实现该接口的函数 function mySearch(source: string, subString: string): boolean { return source.includes(subString); } const search: SearchFunc = mySearch; // 正确 // const search: SearchFunc = (x: number, y: number) => x + y; // 错误:类型不匹配 ``` 在上面的例子中,`SearchFunc`接口定义了一个函数形状,该函数接受两个字符串参数并返回一个布尔值。`mySearch`函数符合这个形状,因此它可以被赋值给类型为`SearchFunc`的变量`search`。 ##### 可选参数与剩余参数 接口定义的函数类型同样可以包含可选参数和剩余参数。 ```typescript interface SearchFuncWithOptional { (source: string, subString?: string): boolean; // subString是可选的 } function searchWithDefault(source: string, subString?: string): boolean { return subString ? source.includes(subString) : true; // 如果没有提供subString,默认返回true } const searchWithDefaultFunc: SearchFuncWithOptional = searchWithDefault; interface VariadicSearchFunc { (source: string, ...subStrings: string[]): boolean; // 剩余参数 } function multiSearch(source: string, ...subStrings: string[]): boolean { return subStrings.some(sub => source.includes(sub)); } const multiSearchFunc: VariadicSearchFunc = multiSearch; ``` #### 3.2.2.2 可索引类型接口 在JavaScript中,数组和对象经常作为“集合”使用,存储一系列的元素或键值对。TypeScript通过可索引类型接口来支持这些集合的类型检查。可索引类型接口定义了一个索引签名,它描述了对象索引的类型以及对应的值类型。 ##### 数组类型接口 虽然TypeScript内置了对数组的支持,但了解如何手动定义类似数组的可索引类型接口仍然很有用。 ```typescript interface StringArray { [index: number]: string; // 索引是number类型,对应的值是string类型 } let myArray: StringArray; myArray = ["Bob", "Fred"]; // 正确 // myArray = [1, 2, 3]; // 错误:索引对应的值类型不匹配 // 注意:在TypeScript中,数组类型已经内置了索引签名,上面的接口主要用于演示目的 ``` ##### 对象类型接口 对象也可以有索引签名,但通常用于描述那些具有动态键名的对象,比如字典或哈希表。 ```typescript interface NumberDictionary { [index: string]: number; // 索引是string类型,对应的值是number类型 } let myDict: NumberDictionary = { "one": 1, "two": 2 }; // myDict["three"] = "three"; // 错误:索引对应的值类型不匹配 myDict["three"] = 3; // 正确 // 索引签名类型必须是字符串或数字 // interface BadDictionary { // [index: boolean]: string; // 错误:索引签名类型不能是布尔值 // } ``` #### 3.2.2.3 结合使用 在实际应用中,函数类型接口和可索引类型接口往往不是孤立使用的,它们可以相互结合,用于定义更复杂的类型结构。 ```typescript interface User { name: string; age: number; } interface UserDatabase { [userId: string]: User; // 以字符串为索引,每个索引对应的值是User类型 } function getUserById(db: UserDatabase, id: string): User | undefined { return db[id]; } const users: UserDatabase = { "1": { name: "Alice", age: 30 }, "2": { name: "Bob", age: 25 } }; const user = getUserById(users, "1"); console.log(user?.name); // 输出: Alice ``` 在这个例子中,`UserDatabase`接口定义了一个可索引类型,其索引是字符串类型(用户ID),对应的值是`User`类型。`getUserById`函数接受这样的数据库和用户ID作为参数,并返回对应的用户对象或`undefined`(如果用户ID不存在)。 #### 总结 通过本章节的学习,我们了解了如何在TypeScript中使用接口来约定函数的形状和定义可索引类型。函数类型接口使得我们能够精确地指定函数的参数和返回值的类型,增强了代码的可读性和健壮性。而可索引类型接口则为我们提供了定义复杂集合(如数组和字典)类型的能力,让我们能够对这些集合进行更严格的类型检查。结合使用这两种接口,我们可以构建出更加复杂、类型安全的TypeScript应用。
上一篇:
3.2.1 接口的定义
下一篇:
3.2.3 使用接口来约束类
该分类下的相关小册推荐:
vue项目构建基础入门与实战
TypeScript和Vue从入门到精通(五)
Vue.js从入门到精通(四)
vuejs组件实例与底层原理精讲
移动端开发指南
Vue面试指南
Vue原理与源码解析
VUE组件基础与实战
Vue3技术解密
Vue.js从入门到精通(三)
TypeScript和Vue从入门到精通(四)
Vue源码完全解析