步入TypeScript中的其它类型,js要认怂了吗

TypeScript基础-基本类型检查-下

其他常用类型

除了支持js里的常见类型之外,ts还有自己的特殊类型:

  • 联合类型: 多种类型任选其一
 // 联合类型,name可能为string类型,可能为undefined类型let name1 = string | undefined; 

⚠️,因为name1可能为undfined,要注意使用了string方法时的场景

此时使用vscode还是会智能提示出string类型上的方法

当我们选中☑️提示出的一个方法时,变量后面带上了?(mdn),太智能了吧!

 // name1后面自动带上?,避免为undefined时的报错name1?.xxx() 

所以最好配合类型保护进行判断

 // 类型保护:当某个变量进行类别判断之后,在判断语句中便可以确定类型if (typeof name1 === 'string') { name1.xxx()} 
  • void类型

js中其代表的含义是:void 运算符 对给定的表达式进行求值,然后返回undefined

ts完全不一样了,含义:通常用于约束函数的返回值,表示该函数没有任何返回

  • never类型: 通常用于约束函数的返回值,表示该函数用于不会结束
 function throwError():never {throw new Error("错误");}function doSomeThings():never {while (true) {}} 
  • 字面量类型: 用特定的值去约束,后续赋值只能特定的值
 let a:123let b:"男"let c:[] 
  • 元祖类型(Tuple):固定长度的数组,并且数组的每一项类型确定
 let arr: [number, string]arr = [123, "456"] 
  • any类型: 可以赋值任意类型, 无约束

类型别名

  • 含义

对已知的类型去定义名称

  • 写法
 type 类姓名 = xxxtype User = {name: string}let u: User 

这样写的好处,可以复用多处定义同样的类型,复用性更高


函数有意思的约束-重载

函数重载:在函数实现前,对函数进行多种情况的声明

现在有这样的场景,要实现传入相同类型的值, 返回相同类型的值

可以这样实现:function combine(a: number | string, b: number | string): number | string {if (typeof a === 'number' && typeof b === 'number') {return a * b}if (typeof a === 'string' && typeof b === 'string') {return a + b}throw new Error("a和b必须是相同类型");}combine(1, 3) 

但这样写不能强约束,combine传入的值可能为不同类型,该怎么办呢?

/**
 * 得到a * b
 * @param a 
 * @param b 
 */
function combine(a: number, b: number): number 
/**
 * 得到a + b
 * @param a 
 * @param b 
 */
function combine(a: string, b: string): string 
	function combine(a: number | string, b: number | string): number | string {
	if (typeof a === 'number' && typeof b === 'number') {
		return a * b
	}
	if (typeof a === 'string' && typeof b === 'string') {
		return a + b
	}
	throw new Error("a和b必须是相同类型");
} 

这样写就能实现重载,并且对combine传入强约束,并且可以看到对应的注释

函数约束-可选

可以对函数的参数可选传入, 也可对参数默认赋值

  • 可选传入:在参数名后面加上问号,表示该参数不是必传
 function combine(a: number, b: number, c?: number) {}combine(1, 2)combine(1, 2, 3) 

此时的c类型惊奇的发现多了个undefined

要注意!!多个参数时,第一个参数不能可选?

  • 默认赋值
 function combine(a: number, b: number, c: number = 0) {}combine(1, 2)combine(1, 2, 3) 

此时查看c类型, 发现多了个可选符号?

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值