TypeScript中文手册
5,函数
### 5.1 定义 在JavaScript里,函数可以使用函数体外部的变量。 当函数这么做时,我们说它‘捕获’了这些变量。 ```typescript let z = 100; // 有名字的函数 function add(x, y) { return x + y + z; //使用函数体外部的变量 } // 匿名函数 let myAdd = function(x, y) { return x + y; }; ``` ### 5.2 函数类型 ##### 5.2.1 为函数定义类型 ```typescript //每个参数添加类型之后再为函数本身添加返回值类型 //TypeScript能够根据返回语句自动推断出返回值类型,因此我们通常省略它 function add(x: number, y: number): number { return x + y; } let myAdd = function(x: number, y: number): number { return x + y; }; ``` ##### 5.2.2 书写完整函数类型 ```typescript let myAdd: (x:number, y:number) => number = function(x: number, y: number): number { return x + y; }; ``` ```typescript //只要参数类型是匹配的,那么就认为它是有效的函数类型,而不在乎参数名是否正确 let myAdd: (baseValue: number, increment: number) => number = function(x: number, y: number): number { return x + y; }; ``` ```typescript //在赋值语句的一边指定了类型但是另一边没有类型的话,TypeScript编译器会自动识别出类型 //这叫做“按上下文归类”,是类型推论的一种 let myAdd: (baseValue: number, increment: number) => number = function(x, y) { return x + y; }; ``` ### 5.3 可选参数和默认参数 > TypeScript里的每个函数参数都是必须的。 传递给一个函数的参数个数必须与函数期望的参数个数一致。 > > JavaScript里,每个参数都是可选的,可传可不传。 没传参的时候,它的值就是undefined。 在TypeScript里我们可以在参数名旁使用`?`实现可选参数的功能 ```typescript function buildName(firstName: string, lastName?: string) { if (lastName) return firstName + " " + lastName; else return firstName; } ``` > 在TypeScript里,我们也可以为参数提供一个默认值当用户没有传递这个参数或传递的值是`undefined`时。 它们叫做有默认初始化值的参数。 ```typescript function buildName(firstName: string, lastName = "Smith") { return firstName + " " + lastName; } ``` > 如果带默认值的参数出现在必须参数前面,用户必须明确的传入`undefined`值来获得默认值。 ```typescript function buildName(firstName = "Will", lastName: string) { return firstName + " " + lastName; } let result1 = buildName("Bob"); // error, too few parameters let result2 = buildName("Bob", "Adams", "Sr."); // error, too many parameters let result3 = buildName("Bob", "Adams"); // okay and returns "Bob Adams" let result4 = buildName(undefined, "Adams"); // okay and returns "Will Adams" ``` ### 5.4 剩余参数 > 必要参数,默认参数和可选参数有个共同点:它们表示某一个参数。 有时,你想同时操作多个参数,或者你并不知道会有多少参数传递进来。 在JavaScript里,你可以使用`arguments`来访问所有传入的参数。 > > 剩余参数会被当做个数不限的可选参数。 可以一个都没有,同样也可以有任意个。 编译器创建参数数组,名字是你在省略号(`...`)后面给定的名字,你可以在函数体内使用这个数组。 ```typescript function buildName(firstName: string, ...restOfName: string[]) { return firstName + " " + restOfName.join(" "); } let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie"); let buildNameFun: (fname: string, ...rest: string[]) => string = buildName; ``` ### 5.5 this ##### 5.5.1 `this`和箭头函数 ##### 5.5.2 `this`参数 ##### 5.5.3 回调函数里的`this`参数 ### 5.6 重载
顶部
收展
底部
[TOC]
目录
1,基础类型
2,变量声明
3,接口
4,类
5,函数
6,泛型
7,枚举
8,类型推论
9,类型兼容性
10,高级类型
11,符号Symbols
12,Iterators(迭代)
13,模块
14,命名空间
15,模块解析