TypeScript——函数

函数类型

例如:

function add(x: number, y: number): number {
	return x + y
}

let myAdd = function(x: number, y: number): number { return x + y }

值得一提的是,对于函数的返回值类型,TS 会自动进行判断,所以可以省略声明函数的返回类型。

箭头函数的声明:

let myAdd: (x: number, y: number) => number = function (x: number, y: number):number {
	return x + y
}

并且在函数的声明中,对于参数类型的验证,只是对类型的验证,并不会对参数的名称进行验证,即参数的名称可以任意。

可选参数和默认参数

TS 的函数参数的验证通俗易懂,首先要满足参数的个数,如果不满足则会报错。如果有特殊需求可以使用可选参数,即可传可不传。
例如:

function buildName(firstName: string, lastName?: string) {
	if (lastName)
		return firstName + " " + lastName
	else 
		return firstName
}
// 即第一个参数是必传,第二个是选传
let res = buildName('wjc')

需要注意的是,可选参数必须是在必须参数的后面定义。

相应地,在 TS 中也提供了参数默认值的功能。
例如:

function buildName(firstName: string, lastName = "wjc") {}

即如果这个带默认值的参数不传值,也会有默认值,避免了出现 undefined。而且,也可以把带默认值的参数看作可选的,因为它是可以不用传值,也可以正常使用函数。但是与可选参数不同的是, 默认参数不需要放在必须参数之后声明。

剩余参数

剩余参数这个概念在 JS 中是 arguments,在 TS 中是可以通过一个变量接收(类似于ES6的…)。

function buildName(firstName: string, ...restOfName: string[]) {
	return firstName + " " + restOfName.join(" ")
}

let myFirend = buildName("chenjian", "fahui", "lingjun")

对于整个函数来说,剩余参数也是参数,所以也可以使用类型定义。

this

熟悉 JS 的同学肯定知道,涉及函数时,this 的指向问题总是不可避免需要注意的。同样地,在 TS 中也是,this 指向的问题也需要重视。
通用写法:

// 利用箭头函数
class Handler {
	info: string,
	onClickGood = (e: Event) => { this.info = e.message }
}

重载

在 TS 中提出了重载的概念,即对一个函数提供多个函数类型定义来实现函数重载,并且需要注意的是,尽量把最精准的一个函数类型定义写在前面,这样可以减少多余的性能消耗(因为,编译器这样可以第一次就找到与调用匹配的函数类型定义)。
例如:

function pickCard(x: {suit: string; card: number;}[]): number
function pickCard(x: number): {suit: string; card: number;}
// 这里any已经不是所有类型了,只能是上述两种x类型,pickCard函数才会正常调用。
function pickCard(x): any {
	if (typeof x === 'object') {
		let pickedCard = Math.floor(Math.random() * x.length)
	}
	else if (type x === "number") {
		let pickedSuit = Math.floor(x / 13)
		return { suit: suits[pickSuit], card: x % 13}
	}
}
发布了140 篇原创文章 · 获赞 16 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_42049445/article/details/103104185