前端vue ts
TypeScript
安装ts
第一个ts代码
vscode自动编译
类型注解
接口interface
类class
基本数据类型
数组 元组
enum 枚举
any
void
函数
vue3 快速上手
Composition API
练习
cloudflare crud
vue-router
Axios
project
Vue3+Element-Plus 实现点击左侧菜单时显示不同内容组件展示在Main区域功能
h5 css
文档声明和字符编码
div和span
列表
图片标签
表格
表单标签
本文档使用 MrDoc 发布
-
+
首页
函数
函数是 JavaScript 应用程序的基础,它帮助你实现抽象层,模拟类,信息隐藏和模块。在 TypeScript 里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方。TypeScript 为 JavaScript 函数添加了额外的功能,让我们可以更容易地使用。 # 基本示例 和 JavaScript 一样,TypeScript 函数可以创建有名字的函数和匿名函数。你可以随意选择适合应用程序的方式,不论是定义一系列 API 函数还是只使用一次的函数。 通过下面的例子可以迅速回想起这两种 JavaScript 中的函数: ``` // 命名函数 function add(x, y) { return x + y } // 匿名函数 let myAdd = function(x, y) { return x + y; } ``` # 函数类型 ## 为函数定义类型 让我们为上面那个函数添加类型: ``` function add(x: number, y: number): number { return x + y } let myAdd = function(x: number, y: number): number { return x + y } ``` 我们可以给每个参数添加类型之后再为函数本身添加返回值类型。TypeScript 能够根据返回语句自动推断出返回值类型。 ## 书写完整函数类型 现在我们已经为函数指定了类型,下面让我们写出函数的完整类型。 ``` let myAdd2: (x: number, y: number) => number = function(x: number, y: number): number { return x + y } ``` # 可选参数和默认参数 TypeScript 里的每个函数参数都是必须的。 这不是指不能传递 null 或 undefined 作为参数,而是说编译器检查用户是否为每个参数都传入了值。编译器还会假设只有这些参数会被传递进函数。 简短地说,传递给一个函数的参数个数必须与函数期望的参数个数一致。 JavaScript 里,每个参数都是可选的,可传可不传。 没传参的时候,它的值就是 undefined。 在TypeScript 里我们可以在参数名旁使用 ? 实现可选参数的功能。 比如,我们想让 lastName 是可选的: 在 TypeScript 里,我们也可以为参数提供一个默认值当用户没有传递这个参数或传递的值是 undefined 时。 它们叫做有默认初始化值的参数。 让我们修改上例,把firstName 的默认值设置为 "A"。 ``` function buildName(firstName: string='A', lastName?: string): string { if (lastName) { return firstName + '-' + lastName } else { return firstName } } console.log(buildName('C', 'D')) console.log(buildName('C')) console.log(buildName()) ``` # 剩余参数 必要参数,默认参数和可选参数有个共同点:它们表示某一个参数。 有时,你想同时操作多个参数,或者你并不知道会有多少参数传递进来。 在 JavaScript 里,你可以使用 arguments 来访问所有传入的参数。 在 TypeScript 里,你可以把所有参数收集到一个变量里: 剩余参数会被当做个数不限的可选参数。 可以一个都没有,同样也可以有任意个。 编译器创建参数数组,名字是你在省略号( ...)后面给定的名字,你可以在函数体内使用这个数组。 ``` function info(x: string, ...args: string[]) { console.log(x, args) } info('abc', 'c', 'b', 'a') ``` # 函数重载 函数重载: 函数名相同, 而形参不同的多个函数 在JS中, 由于弱类型的特点和形参与实参可以不匹配, 是没有函数重载这一说的 但在TS中, 与其它面向对象的语言(如Java)就存在此语法 ``` /* 函数重载: 函数名相同, 而形参不同的多个函数 需求: 我们有一个add函数,它可以接收2个string类型的参数进行拼接,也可以接收2个number类型的参数进行相加 */ // 重载函数声明 function add (x: string, y: string): string function add (x: number, y: number): number // 定义函数实现 function add(x: string | number, y: string | number): string | number { // 在实现上我们要注意严格判断两个参数的类型是否相等,而不能简单的写一个 x + y if (typeof x === 'string' && typeof y === 'string') { return x + y } else if (typeof x === 'number' && typeof y === 'number') { return x + y } } console.log(add(1, 2)) console.log(add('a', 'b')) // console.log(add(1, 'a')) // error ```
admin
2023年3月18日 16:50
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码