学习TypeScript7(类型断言|类型推论 |联合类型 |交叉类型)

语法:1) 值 as 类型 value as string

​ 2)<类型>值 value

需要注意的是,类型断言只能够「欺骗」TypeScript 编译器,无法避免运行时的错误,反而滥用类型断言可能会导致运行时错误。

使用any临时断言

window.abc=123
//这样写会报错因为window没有abc这个东西

(window as any).abc=123
//可以使用any临时断言在any类型的变量上,访问任何属性都是允许的

as const

是对字面值的断言,与const直接定义常量是由区别的

如果是普通类型跟直接const声明是一样的

const name='小明'
names='aa'  //无法修改

let name2='小明' as const
name2='aa'  //无法修改
//数组
let a1=[10,20] as const;
const a2=[10,20];

a1.unshift(30);//错误,此时已经断言字面量为[10,20],数据无法做任何修改
a2.unshift(30);//通过,没有修改指针
//函数
interface A{
	run:string
}
interface B{
	build:string
}
let fn=(type:A | B):void =>{
	console.log((type as A).run)
	console.log((<A>type).run)
}

window.abc=123//报错修改
(window as any).abc=123

类型推论

let x=3

typescript会在没有明确指定类型的时候推测出一个类型,这就是类型推论

如果你在声明变量没有定义类型也没有赋值这时候TS会推断成any类型可以进行任何操作

最佳通用类型

当需要从几个表达式中推断类型时候,会使用这些表达式的类型推断出一个最合适的通用类型。最终通用类型取自候选类型,有些时候候选类型共享相同的通用类型。

let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];

如果没有找到最佳通用类型的话,类型推断的结果为联合数组类型,(Rhino | Elephant | Snake)[]

上下文类型

typescript类型推论也可能按照相反的方向进行。这被叫做“按上下文归类”。按上下文归类会发生在表达式的类型与所处的位置相关时。

如果函数表达式不是在上下文类型的位置,mouseEvent参数的类型需要指定为any,这样也不会报错了。

这个函数表达式有明确的参数类型注解,上下文类型被忽略。

window.onmousedown=function(mouseEvent:any){
	console.log(mouseEvent.button)
}

联合类型

let phone:number|string=1391521

let fn=function(type:number |boolean):boolean{
	return !!type//  强转
}

交叉类型

interface Pople{
	name:string,
	age:number
}
interface Man{
	sex:number
}
const xx=(man:Pople & Man):void=>{
	console.log(man)
}
xx({
	name:'xx',
	age:100,
	sex:1
})
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值