函数是JavaScript应用程序的基础。 它帮助你实现抽象层,模拟类,信息隐藏和模块。 在TypeScript里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义 行为 的地方。 TypeScript为JavaScript函数添加了额外的功能,让我们可以更容易地使用。
在 TypeScript 中,函数是用于执行特定任务并可能返回结果的代码块。
函数类型
可以为函数定义类型来明确函数的参数类型和返回值类型。
// 有名字的函数
function sum(a: number, b: number): number {
return a + b;
}
// 匿名函数
let mySum = function(x: number, y: number): number {
return x + y; };
这里明确了 sum 函数接受两个 number 类型的参数 a 和 b,并返回一个 number 类型的值。
书写完整函数类型
函数类型包含两部分:参数类型和返回值类型。 当写出完整函数类型的时候,这两部分都是需要的。
在函数和返回值类型之前使用( =>)符号。
返回值类型是函数类型的必要部分,如果函数没有返回任何值,必须指定返回值类型为 void 而不能留空。
let mySum: (x: number, y: number) => number =
function(x: number, y: number): number {
return x + y; };
在这段代码中:
let mySum: (x: number, y: number) => number这部分定义了一个变量mySum,并指定了它的类型为接受两个number类型参数并返回number类型值的函数类型。- 然后通过
function(x: number, y: number): number { return x + y; }为mySum变量赋值了一个具体的函数实现。
以参数列表的形式写出参数类型,为每个参数指定一个名字和类型:
let mySum: (a: number, b: number) => number =
function(x: number, y: number): number {
return x + y; };
在这段代码中,虽然函数定义中的参数名 a、b 与函数实现中的参数名 x、y 不同,但它们的类型都是 number,这是匹配的。
TypeScript 在类型检查时关注的是参数的类型,而不是参数的名称。只要参数的类型符合函数类型定义的要求,代码就可以通过类型检查。
在定义函数的类型时,只考虑参数的类型和返回值的类型。
函数中使用的捕获变量不会体现在类型里。 实际上,这些变量是函数的隐藏状态并不是组成API的一部分。
这是因为这些捕获变量属于函数的内部实现细节,对于使用该函数的外部代码来说,并不需要知道这些内部的状态。函数的 API 主要是通过其公开的参数和返回值来与外部进行交互和通信。
示例:
let outerValue = 10;
function myFunction(x: number): number {
let innerValue = 5;
return x + outerValue + innerValue;
}
在上述 myFunction 函数中,outerValue 是捕获的外部变量,innerValue 是函数内部的变量,它们都不会体现在函数的类型 (x: number) => number 中。
推断类型
如果在赋值语句的一边指定了类型,但是另一边没有类型的话,TypeScript编译器会自动识别出类型:
let mySum = function(x: number, y: number): number {
return x + y; };
在这个例子中,mySum 的类型会被推断为 (x: number, y: number) => number 。

可选参数和默认参数
JavaScript里,每个参数都是可选的,可传可不传。 没传参的时候,它的值就是undefined。
TypeScript里的每个函数参数都是必须的。传递给一个函数的参数个数必须与函数期望的参数个数一致。
在 TypeScript 中,可选参数和默认参数为函数提供了更灵活的参数设置方式。
可选参数
通过在参数名后面添加 ? 来标记参数为可选参数。调用函数时,可以选择不传递该参数。
示例:
function printInfo(name: string, age?: number) {
console.log(`Name: ${
name}, Age: ${
age ?? 'no age'}`);
}
printInfo("张三"); // "Name: 张三, Age: no age"
printInfo("李四", 25); // "Name: 李四, Age: 25"
printInfo("王二", 0); // "Name: 王二, Age: 0"
可选参数必须跟在必须参数后面。
这是为了确保在调用函数时,必需的参数能够按照正确的顺序被传递,而不会因为可选参数的存在导致参数传递的混乱。
默认参数
可以为参数指定一个默认值,如果调用函数时没有传递该参数或传递的值是undefined时,就会使用默认值。
function printInfo(name: string, age: number = 18) {
console.log(

最低0.47元/天 解锁文章
8868

被折叠的 条评论
为什么被折叠?



