TypeScript学习总结(二)

news/2024/10/30 19:37:21/

函数

TypeScript函数的定义和调用

TypeScript 函数的定义和调用与 JavaScript 函数的定义和调用基本相同。

函数的定义:

在 TypeScript 中,可以使用 function 关键字来定义函数。例如:

function add(x: number, y: number): number {return x + y;
}
  • add 是函数的名称。
  • (x: number, y: number) 是函数的参数列表,其中 xy 是参数的名称,: number 表示它们的类型为数字。
  • : number 表示函数的返回类型为数字。
  • { return x + y; } 是函数体,表示函数要执行的操作。

注意,在 TypeScript 中,可以通过给参数指定类型和返回类型来增强代码的可读性和安全性。而且,TypeScript 还支持可选参数、默认参数、剩余参数等高级特性,可以让我们更加灵活地定义函数。

函数的调用:

在 TypeScript 中,可以像 JavaScript 一样直接调用函数。例如:

const result = add(1, 2);
console.log(result); // 输出 3

这里将两个数字作为参数传递给 add 函数,并将结果存储在 result 变量中。然后,使用 console.log() 函数将结果输出到控制台。

TypeScript可选参数和默认参数

TypeScript中的可选参数和默认参数是函数参数的两种类型。

可选参数是在函数定义时通过在参数名称后面添加问号 ? 来指定的。这意味着该参数可以传递一个值,也可以不传递任何值。如果调用函数时未传递可选参数,则它将具有默认值 undefined

例如:

function foo(x: number, y?: number) {console.log(`x = ${x}, y = ${y}`);
}foo(1); // 输出 "x = 1, y = undefined"
foo(1, 2); // 输出 "x = 1, y = 2"

默认参数是在函数定义时为参数指定的值。如果调用函数时未传递参数,则该参数将使用默认值。

例如:

function bar(x: number, y = 10) {console.log(`x = ${x}, y = ${y}`);
}bar(1); // 输出 "x = 1, y = 10"
bar(1, 2); // 输出 "x = 1, y = 2"

需要注意的是,如果一个函数同时具有可选参数和默认参数,则可选参数必须放在默认参数之前。

例如:

function baz(x: number, y = 10, z?: number) {console.log(`x = ${x}, y = ${y}, z = ${z}`);
}baz(1); // 输出 "x = 1, y = 10, z = undefined"
baz(1, 2); // 输出 "x = 1, y = 2, z = undefined"
baz(1, 2, 3); // 输出 "x = 1, y = 2, z = 3"
剩余参数

在 TypeScript 中,剩余参数(rest parameters)是一种语法,它允许函数接受可变数量的参数。当你不知道函数会接收多少个参数时,剩余参数可以非常有用。

剩余参数以三个点(…)开头,并且必须是函数的最后一个参数。在函数内部,剩余参数会被转换为一个数组,该数组包含所有传递给函数的额外参数。

例如,以下函数使用了剩余参数:

function sum(base: number, ...numbers: number[]): number {let total = base;for (const num of numbers) {total += num;}return total;
}console.log(sum(1, 2, 3, 4)); // 输出10
console.log(sum(5)); // 输出5

在上面的示例中,sum 函数接受一个名为 base 的必需参数和任意数量的额外数字参数。当我们调用 sum 时,剩余参数 ...numbers 将传递给函数,并将其转换为一个包含所有额外参数的数组。

需要注意的是,剩余参数只能出现在函数声明中的最后一个参数位置,并且不能在同一个函数中出现多次。

函数重载

在 TypeScript 中,函数重载是一种机制,允许我们定义多个函数签名,以处理不同类型和数量的参数。这样做可以提高代码的可读性和安全性。

函数重载通过在函数定义前使用相同名称但不同的参数列表来实现。在实际调用时,TypeScript 编译器会根据传递的参数类型和数量选择合适的函数签名进行调用。如果没有匹配的函数签名,则编译器会报错。

例如,下面是一个计算两个数字之和的例子:

function add(x: number, y: number): number {return x + y;
}let result = add(1, 2); // result === 3

我们可以通过函数重载来扩展该函数,使其也能够计算字符串的拼接:

function add(x: number, y: number): number;
function add(x: string, y: string): string;
function add(x: any, y: any): any {return x + y;
}let result1 = add(1, 2);     // result1 === 3
let result2 = add("Hello", "World");   // result2 === "HelloWorld"

上面的代码中,我们定义了两个函数签名,分别接受两个数字和两个字符串作为参数,并返回它们的和或拼接结果。最后一个函数定义是一个通用实现,用于处理所有类型的参数。使用函数重载后,无论在何处调用 add 函数,TypeScript 编译器都可以选择正确的函数签名进行调用。

typescript的箭头函数

在TypeScript中,箭头函数的语法与JavaScript相同,使用箭头符号“=>”来定义函数。例如:

const add = (a: number, b: number) => {return a + b;
};

这个例子中,箭头函数用于定义一个加法函数,它接受两个参数a和b,并返回它们的和。在函数体内部,我们使用了return关键字来返回计算结果。

箭头函数还有一个更简短的写法,如果函数体只有一行代码,则可以省略花括号和return关键字。例如:

const add = (a: number, b: number) => a + b;

这个例子中,箭头函数定义的加法函数仅有一个表达式,它直接返回了计算结果。这种写法比较常见,尤其是在函数体非常简短的情况下。

另外,箭头函数还具有自动绑定this关键字的特性,它们的this指向它们声明时所在的上下文对象。例如:

class MyClass {private value: number = 10;public printValue() {setTimeout(() => {console.log(this.value);}, 1000);}
}const obj = new MyClass();
obj.printValue(); // 输出: 10

在这个例子中,箭头函数被用于setTimeout函数的回调中,它可以访问MyClass类实例的私有属性value,并且不需要使用bind方法来手动绑定this关键字。这种特性非常方便,减少了代码的复杂度。


http://www.ppmy.cn/news/62575.html

相关文章

[Leetcode] 0705. 设计哈希集合

705. 设计哈希集合 English Version 题目描述 不使用任何内建的哈希表库设计一个哈希集合(HashSet)。 实现 MyHashSet 类: void add(key) 向哈希集合中插入值 key 。bool contains(key) 返回哈希集合中是否存在这个值 key 。void remove(key) 将给定值 key 从哈希集…

31. Kubernetes 核心组件讲解——kubelet

本章讲解知识点 kubelet 概述节点管理Pod管理容器健康检查1. kubelet 概述 在 Kubernetes 集群中,每个节点(Node)上都会运行一个 kubelet 服务进程。kubelet 是 Kubernetes 中的一个重要组件,用于管理该节点上的 Pod 和容器。 kubelet 进程会从 Kubernetes 的 Master 节点…

网易云音乐开发--前后端交互

前后端交互 首先启动服务器 1. 根目录下执行: npm start 2. 服务器地址: http://localhost:3000 3. 示例: http://localhost:3000/banner 测试接口能不能用 发起请求 看接口说明,在wx的load函数中发起请求 请求成功 封装请求功能函数 …

磁盘和文件系统管理

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。个人主页:小李会科技的…

软考A计划-重点考点-专题五(计算机网络知识)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

计算机图形学 | 实验六:旋转立方体

计算机图形学 | 实验六:旋转立方体 计算机图形学 | 实验六:旋转立方体Z-缓冲GLM函数库PVM矩阵PVM矩阵的使用 华中科技大学《计算机图形学》课程 MOOC地址:计算机图形学(HUST) 计算机图形学 | 实验六:旋转…

安卓系统APP稳定性测试分析的研究报告

目录 第一章:概念 第二章:重要性 第三章:意义和作用 第四章:行业现状 第五章:常见测试方法和工具 第六章:实际测试场景 第七章:测试方案 第八章:测试方法 第九章&#xff1…

c++面向对象之封装、继承、和多态

一、封装 把客观事物封装成类,而且可以把自己的数据和方法设置为只能让可信的类或者对象操作,对不可信的信息进行隐藏(利用public,private,protected,friend)实现 二、继承 2.1类与类的关系 has-a :描述一个类由多个部件类构成…