2、深入掌握TS

文章详细介绍了TypeScript中的函数类型解构,如TypStuobj类型的定义及使用。同时,对比了interface和type的区别,如定义范围、继承功能等。还讨论了元组的概念和应用,以及如何创建只读数组。此外,文章提到了类的静态属性和单例模式的两种实现方式——饿汉式和懒汉式。最后,文章讲解了getter和setter的使用,强调了它们在数据验证中的作用。
摘要由CSDN通过智能技术生成

ts函数类型解构

type TypStuobj = {username: string, age: number, phone: string}
function info ({username, age}: TypStuobj) {
	console.log(username)
	console.log(age)
}
info({username: 'lisi', age: 18, phone: ''})

interface 和type的区别

  • 区别1: 定义类型的范围不同
    interface 只能定义对象类型或接口当名字的函数类型
    type可以定义任何类型,包括基础类型,联合类型,交叉类型,元组
  • 区别2:接口可以extends一个或多个接口或类, 也可以继承type,但type没有继承功能,但一般接口继承类和type的场景很少见
  • 区别3:用type交叉类型 & 可让类型中的成员合并成一个新的type类型但接口不能交叉合并
  • 接口可合并声明 定义两个相同名称的接口会合并声明,定义的两个同名的type会出现编译错误

元组

  1. 在定义式每个元素的类型都确定
  2. 元素值的数据类型必须是当前元素定义的类型
  3. 元素值的个数必须和定义时的个数相同
let salary:[string, number, number, number,number] 
	= ['张三', 199, 30, 20000, 12]

ts数组和数组元素怎样同时为只读

 const account = [10, 20, 30, 40] // 无法保证数组元素不能被改变
 const account = [10, 20, 30, 40] as const // 将数组里面的元素 也当做常量

可变元组和他的应用场景

let people:[string, number, ...any[]] = ["张三", 19] // 可变元组
// 解构
let [custname, age, ...rest]:[string, number, ...any[]] = ['张三', 30]

类,静态属性,何时用静态属性

定义:类就是拥有相同属性和方法的一些列对象的集合
展开理解:类是一个模具,是从这该类包含的所有具体对象中抽象出来的一个概念,类定义了它所包含的全体对象和静态类型特征和动态特征

class People {
	name: string
	age: number
	addr: string = "大北窑"
	!phone: string
	static count: number = 0
	constructor (_name: string, _age: number) {
		this.name = _name
		this.age = _age
		People.count++
	}
	doEat() {}
}

ts单例模式的两种实现

// 饿汉式
class DateUtil{
	static dateUtil = new DateUtil()
	private constructor () {}
	formatDate () {}
	diffDateByDay () {}
	diffDateByHour () {}
}
const dateUtil = DateUtil.dateUtil
// 懒汉式
class DateUtil{
	static dateUtil: DateUtil
	static getInstance () {
		if (!this.dateUtil) {
			DateUtil.dateUtil = new DateUtil()
		}
		return DateUtil.dateUtil
	}
	private constructor () {}
	formatDate () {}
	diffDateByDay () {}
	diffDateByHour () {}
}
const dateUtil = DateUtil.dateUtil

ts中getter,setter的使用和意义

class People {
	name: string
	!_age: number
	addr: string = "大北窑"
	!phone: string
	static count: number = 0
	constructor (_name: string) {
		this.name = _name
		People.count++
	}
	doEat() {}
	set age (val: number) {
		if(val < 128 && val > 10) {
			this._age = val
		} else {
			throw new Error("年龄不在合适范围")
		}
	}
	get age () {
		return this._age
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值