ts语法知识

1. 类型推论
在TS中存在类型推断机制,在没有给变量添加类型注解的情况下,TS也会给变量推论出一个类型

let age = 18; //vscode自动推断出类型为number

2. 断言
有些时候开发者比Ts本身更清楚但钱的类型是什么,可以用断言(as)让类型更加精确和具体

type Person= {
	name:string
	age:number
}
//提前知道消息体数据格式,用断言
let  userInfo = {} as Person;

3. 泛型
在定义接口/函数等类型的时候 ,不预先指定具体的类型,而在使用的时候在指定类型的一种特性,使用泛型可以复用类型并且让类型更加灵活

3.1 泛型接口
在接口类型的名称后面使用即可声明一个泛型参数,接口里的其他成员都能使用该参数的类型

interface ResData<T> {
	code:number,
	msg:string,
	data:T
}

(1)//定义具体类型
interface User{
	name:string
	age:number
}
//使用泛型并传入具体参数
let UserData:ResData<User>{
	code:200,
	msg:'success',
	data:{
		name:'jack',
		age:18
	}
}

(2)//定义具体类型
interface Produnct{
	id:number
	goodName:string
}
//使用泛型并传入具体参数
let ProdunctData:ResData<Produnct>{
	code:200,
	msg:'success',
	data:{
		id:1,
		goodName:'哇哈哈'
	}
}

3.2 泛型别名
在接口类型别名后面使用即可声明一个泛型参数,接口里的其他成员都能使用该参数的类型
一般用于定义对象

type ResData<T> = {
	code:number,
	msg:string,
	data:T
}

//定义具体类型
type User={
	name:string
	age:number
}
//使用泛型并传入具体参数
let UserData:ResData<User> ={
	code:200,
	msg:'success',
	data:{
		name:'jack',
		age:18
	}
}

3.3 泛型函数
在接函数名称后面使用即可声明一个泛型参数,整个函数中(参数、返回值、函数体)的变量都可以使用该参数的类型

function fn<T>() {}

let createArry = <T>(length:number , value:T)=>{
	let arr = [];
	for(let i =0; i<length; i++){
		arr[i] =  value
	}
	return arr
}
createArray(10,20) //泛型推论
createArray<number>(10,20)
createArray<string>(10,'hello')

3.4 泛型约束
作用:泛型的特点就是灵活不确定,有些时候泛型函数的内部需要访问一些特定类型的数据才有的属性,此时会有类型错误,需要通过泛型约束解决

interface LengthObj {
	length:number
}

function logLen<T extends LengthObj>(obj:T){
	console.log(obj.length)
}

logLen<string>('tom')
logLen<number>(200) //错误
logLen({
	length:100,
	name:"zhangsan"
}) 
logLen<{length:number,name:string}>({
	length:100,
	name:"zhangsan"
}) 


  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值