类型断言--as
把一个大的范围断言成小的、精确的范围
type Method = 'GET' | 'POST'
function dd(url:string, method:Method){
log('xxx')
}
let option = {
url: 'https://xxx',
method: 'POST'
}
dd(option.url, option.method) //第二个参数会报错,因为option.method是字符串类型,不是定义的Method类型,可以改写如下:
dd(option.url, option.method as Method)
或者给option定义一个类型
type getOption = {
url: string,
method: Method
}
let option:getOption = {
url: 'https://xxx',
method: 'POST'
}
dd(option.url, option.method)
非空类型断言--!
表示确定某个标识符确实有值,跳过TS在编译阶段对它的检测
function aa(value?:string){
log(value!.length) //表示value一定是有值的
}
aa('pmn')
可选链操作符--?
当对象的属性不存在时,会短路,直接返回undefined,如果存在才会继续执行
type person = {
name: string,
age: number,
friend?:{
name: string,
age?: number,
}
}
let p:person={
name: 'zs',
age: 10
}
log(p.friend?.name)
!! 和 ??
!!将一个其他类型转换为boolean类型,类似Boolean() ??空值合并操作符,当操作符的左侧是null或undefined时,返回右侧操作数,否则返回左侧操作数
let ss:string|null|undefined = undefined
log(ss??'hello') //hello