ts 函数声明及泛型函数

函数声明

函数声明对参数类型, 返回值类型定义,没有返回值定义为void

//必传x,y并且类型都为number,返回值为布尔
function fun1(x:number,y:number):boolean{
	return x>y
}
fun1(1,3)

没有返回值定义为void:

//不返回值,类型为void
function fun1(x:number,y:number):void{
	console.log(x,y)
}

参数可传可不传 并添加默认值:

//x必传,y为可传可不传 默认值为1; 返回值为数组类型,数组的每个值为number
function fun1(x:number,y:number=1):number[]{
	return [x,y]
}
fun1(2)
//报错,返回的x.length一定是定义的所有类型计划都满足有length方法的,但是number没有length。
function fun1(x:string|number):number{
	return x.length
}

泛型函数

软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。

可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。

  • 泛型是指在定义函数,接口,类的时候,不预先指定具体的类型,而在使用的时候指定类型的一种特性。

  • 泛型<T> T类型变量,表示任何类型。帮助我们捕获用户传入的类型(比如:number)

  • 传入泛型用 <number>,尖括号括起来的

  • 创建泛型函数时,编译器要求你在函数体必须正确的使用这个通用的类型

//添加类型变量T,T帮助我们捕获用户传入的类型(比如:number)
//参数类型为T,返回值类型为T
function fun1<T>(x: T): T {
    return x;
}
//这里传入T为string类型
fun1<string>('a')

创建泛型函数时,编译器要求你在函数体必须正确的使用这个通用的类型:

//报错   因为T类型变量代表的是任意类型,所以使用这个函数的人可能传入的是个数字,而数字是没有 .length属性的。
function fun5<T>(x: T): T {
    return x.length;
}

可传入多个类型变量:

function fun1<T, W>(x: T,y:W): W {
    return y
}
fun1<string, boolean>('1',false)

泛型约束

泛型约束可以通过(interface)接口+extends来实现约束。

interface Len{
	length: number
}
//T继承接口Len,代表实参必须有length这个属性才可以
funtion fun<T extends Len>(args:T):T{
	return args.length
}
fun("abc") // 3  字符串是有length属性的
fun({})//报错,因为对象本身没有length属性
fun({length:5}) //不报错
fun(4)//报错,number数据没有length属性
fun(null)//报错
评论 3 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

Jqlender

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值