学习链接:https://www.bilibili.com/video/BV1Q841197av/
函数类型-参数和返回值
函数的类型实际上指的是:函数参数和返回值的类型。
fun(参数:类型,参数:类型):函数返回值类型{ }
函数有两种类型:普通函数、箭头函数
为函数指定类型的两种方式:
- 单独指定参数、返回值的类型
- 同时指定参数、返回值的类型
单独指定参数、返回值的类型
// 普通函数
function add(num1:number ,num2:number):number {
return num1 + num2
}
function add(num1 ,num2):number {
// 这里没有设置函数的参数类型,就是any类型,可以是任何值;然后返回值是number
return num1 + num2
}
function add(num1:number ,num2:number):void {
// 这里设置了函数的返回值为void(空值),所以下面写return会报错。
return num1 + num2
}
function add(num1:number ,num2:number):number {
// 这里设置了函数的返回值为number,但是在函数内部代码中没有return,也会报错。
// return num1 + num2
}
// 箭头函数
const add = (num1:number , num2:number):number => {
return num1+ num2
}
const demo=(x:string,y:string):string=>{
return x + y; // 字符串拼接
}
同时指定参数、返回值的类型
当函数做为表达式时,可以通过类似箭头函数形式的语法来作为函数添加类型
(这种方式只适用于函数表达式,也就是箭头函数)
// 创建函数自定义类型
type AddFn = (num1:number ,num2:number) => number;
// 使用自定义类型作为函数add的类型
const add:AddFn = (num1,num2)=>{
return num1 + num2;
}
/*
type AddFn = (num1:number ,num2:number) => number;
在前面声明了一个类型,在const add:AddFn的时候就是代表:
add函数接收两个参数,num1和num2都是number类型,add函数的返回值是number类型
也就是说相当于提前声明了函数。(提前定义好函数的类型)
*/
// 使用类型别名type ,提前定义好函数的类型
type Arrtype = (number | string)[];
type Funtype = (a:number,b:number)=>number;
// 同时指定参数和返回值类型
const add:Funtype = (x,y)=>{
return x+y;
}
add(10,20)
// add(10,'20') --> 报错
// 使用组合
const reduce = (x:number,y:string):Arrtype=>{
return [x,y]
}
reduce(1,'2')
小结
定义函数的类型
可以自己定义参数和返回值(第一种方式)
可以在前面定义好参数和返回值,然后直接使用(第二种方式)
可以组合使用:参数自己指定,返回类型在前面定义好,在定义函数时使用(第二种方式)
函数类型-void类型
// 函数不指定返回类型 可以省略或者return (返回值可以是any)
const reset = () =>{
return 123;
}
reset();
函数类型-可选参数
// 函数参数--配置可选参数
// 函数默认参数是必选的
const fn = (x:number,y:number)=>{
}
// fn(); ---> 报错
fn(1,23);
// 配置可选参数 ? 表示:出现0次或者1次(该参数),没有多次
const fn2=(x:number,y?:number)=>{
}
fn2(1);
fn2(1,2);
// fn2(1,2,3); ---> 报错
// 配置可选参数 ?不能放在第一个参数,如果要放,那么后面的参数也要放?
// 可选参数只能出现在必选参数后面,可选参数后面不能出现必选参数
const fn2=(x?:number,y?:number)=>{
// const fn2=(x?:number,y:number)=>{ ---> 报错
}
// 函数参数的默认值,如果参数有默认值那么该参数就是可选参数(不传入值的话就是会使用默认值)
const fn4=(a:number=2,b:string='2')=>{
console.log(a,b);
}
fn4(10,'20');
fn4();
// 设置了默认值,就不用在该参数写?了(参数默认值和可选参数互斥,只需要指定一种即可)
// 设置默认值,可传课不传,不传就是使用默认值
// const fn4=(a:number=2,b?:string='2')=>{ ---> 报错