TypeScript 函数

函数是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 类型的参数 ab,并返回一个 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; };

在这段代码中,虽然函数定义中的参数名 ab 与函数实现中的参数名 xy 不同,但它们的类型都是 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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值