【TS】函数类型

函数的类型实际上指的是:函数参数和返回值的类型

一、函数类型

1.1、指定函数参数类型

// 函数声明(Function Declaration)
function sum(x:number, y:number) {
    return x + y;
}
sum(1,2)	// 正确
sum('1',2)	// 报错,x、y类型必须都是设置的number类型

// 函数表达式(Function Expression)
let mySum = function (x:number, y:number) {
    return x + y;
};
mySum(1,2)		// 正确
mySum('1',2)	// 报错,x、y类型必须都是设置的number类型

1.2、指定函数返回值类型

// 函数声明(Function Declaration)
function sum(x, y):number {
    return x + y;
}
sum(1,2)	// 正确
sum('1',2)	// 报错,'1',2 进行的是字符串拼接,所以返回值是string,不是设置的number类型

// 函数表达式(Function Expression)
let mySum = function (x, y):number {
    return x + y;
};
mySum(1,2)		// 正确
mySum('1',2)	// 报错,'1',2 进行的是字符串拼接,所以返回值是string,不是设置的number类型

1.3、单独指定参数、返回值类型

// 普通函数形式
function add1 (num1: number, num2: number): number {
	return num1 + num2;
}
// 箭头函数形式
const add2 = (num1: number, num2: number): number => {
	return num1 + num2;
}

1.4、同时指定参数、返回值类型

  • 当函数作为表达式时,可以通过类似箭头函数形式的语法来为函数添加类型。
  • 这种形式只适用于函数表达式。
const add:(num1: number, num2: number)=>number = (num1,num2)=>{
	return num1 + num2;
}

1.5、指定函数没有返回值(void)

  • 如果函数没有返回值,那么,函数返回值类型为:void
function greet1(name: string): void{
	console.log('Hello',name)
}

const greet2: (name: string)=>void = (name) => {
	console.log('Hello',name)
} 

二、参数设置

2.1、可选参数

  • 输入多余的(或者少于要求的)参数,是不允许的。那么如何定义可选的参数呢?
  • 我们用 ? 表示可选的参数
function buildName(firstName: string, lastName?: string) {
    if (lastName) {
        return firstName + ' ' + lastName;
    } else {
        return firstName;
    }
}
let tomcat = buildName('Tom', 'Cat');	// 打印结果:'Tom Cat'
let tom = buildName('Tom');				// 打印结果:'Tom '
  • 需要注意的是,可选参数必须接在必需参数后面
function buildName(firstName?: string, lastName: string) {
    if (firstName) {
        return firstName + ' ' + lastName;
    } else {
        return lastName;
    }
}
let tomcat = buildName('Tom', 'Cat');
let tom = buildName(undefined, 'Tom');

// index.ts(1,40): error TS1016: A required parameter cannot follow an optional parameter.
// 翻译:错误TS1016:一个必需的参数不能跟随一个可选参数

2.2、默认参数

  • ES6 中,我们允许给函数的参数添加默认值。
  • TypeScript 会将添加了默认值的参数识别为可选参数:
function buildName(firstName: string, lastName: string = 'Cat') {
    return firstName + ' ' + lastName;
}
let tomcat = buildName('Tom', 'Caa');	// 打印结果:'Tom Caa'
let tom = buildName('Tom');				// 打印结果:'Tom Cat'
  • 但是此时就不受「可选参数必须接在必需参数后面」的限制了:
function buildName(firstName: string = 'Tom', lastName: string) {
    return firstName + ' ' + lastName;
}
let tomcat = buildName('Tom', 'Cat');	// 打印结果:'Tom Cat'
let cat = buildName(undefined, 'Cat');	// 打印结果:'Tom Cat'

2.3、剩余参数

  • ES6 中,可以使用 ...rest 的方式获取函数中的剩余参数(rest 参数):
function push(array, ...items) {
    items.forEach(function(item) {
        array.push(item);
    });
}

let a = [];
push(a, 1, 2, 3);
console.log(a)	//  [1, 2, 3]
  • 事实上,items 是一个数组。所以我们可以用数组的类型来定义它:
function push(array: any[], ...items: any[]) {
    items.forEach(function(item) {
        array.push(item);
    });
}

let a = [];
push(a, 1, 2, 3);
  • 注意:rest 剩余参数只能是最后一个参数
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: 在TypeScript中,可以使用以下几种方式来定义函数类型。首先,可以使用函数声明法来定义函数类型,例如:\[1\] ```typescript function fun(): string { return '123'; } ``` 其次,可以使用匿名函数法来定义函数类型,例如:\[3\] ```typescript let fun2 = function (): number { return 123; }; ``` 还可以定义没有返回值的方法,例如:\[3\] ```typescript function fun3(): void { console.log(111); } ``` 此外,为了实现函数重载,可以引入可选参数,例如:\[2\] ```typescript function times(x: number, y?: number) { if (y) { return x * y; } return x; } ``` 以上是在TypeScript中定义函数类型的几种常见方式。 #### 引用[.reference_title] - *1* [TS函数类型定义](https://blog.csdn.net/weixin_44530344/article/details/126683321)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [TS基础——为函数声明类型](https://blog.csdn.net/weixin_41387874/article/details/123078371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [TS复习-----TS中的函数](https://blog.csdn.net/qq_63358859/article/details/126926898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗不甘坠落的流星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值