美文网首页
TS中的!和?用法

TS中的!和?用法

作者: Small_Song | 来源:发表于2021-02-24 17:56 被阅读0次

!用法

  • 用在变量前表示取反
  • 用在赋值的内容后时,使null和undefined类型可以赋值给其他类型并通过编译
let y:number

y = null        // 无法通过编译
y = undefined   // 无法通过编译

y = null!
y = undefined!
// 由于x是可选的,因此parma.x的类型为number | undefined,无法传递给number类型的y,因此需要用x!
interface IDemo {
    x?: number
}

let y:number

const demo = (parma: IDemo) => {
    y = parma.x!
    return y
}

如果存在空情况的判断并赋具体值时,可以不用!,但是如果要想令y存在等于undefined的情况还是需要用!

interface IDemo {
    x?: number
}

let y:number

const demo = (parma: IDemo) => {
    y = parma.x || 1    // 如果为undefined,返回y=1,如果不为undefined,则返回parma.x的值
    return y
}

?用法

  • 除了表示可选参数外

  • 当使用A对象属性A.B时,如果无法确定A是否为空,则需要用A?.B,表示当A有值的时候才去访问B属性,没有值的时候就不去访问,如果不使用?则会报错

// 由于函数参数可选,因此parma无法确定是否拥有,所以无法正常使用parma.x,使用parma?.x向编译器假设此时parma不为空且为IDemo类型,同时parma?.x无法保证非空,因此使用parma?.x!来保证了整体通过编译
interface IDemo {
    x: number
}

let y:number

const demo = (parma?: IDemo) => {
    y = parma?.x!
    console.log(parma?.x)   // 只是单纯调用属性时就无需!    
    return y
}
    
// 如果使用y = parma!.x!是会报错的,因为当parma为空时,是不拥有x属性的,会报找不到x的错误

但是?用法只能读操作而不能写操作,对一个可能为空的属性赋值是不会被编译通过的,此时还需用用到类型断言

interface IDemo {
    x: number
}

// 编译报错,不能赋值给可选属性
const demo = (parma?: IDemo) => {
    parma?.x = 1    
}
    
// 使用类型断言  
const demo = (parma?: IDemo) => {
    let _parma = parma as IDemo
    _parma.x = 1
}

相关文章

  • TS中的!和?用法

    !用法 用在变量前表示取反 用在赋值的内容后时,使null和undefined类型可以赋值给其他类型并通过编译 如...

  • typeScript学习02

    typescript中的函数 ts中函数定义 ts中函数的传参 ts中的函数的可选参数(js中函数的形参和实参可以...

  • ng 路由

    基本用法 添加 AppRoutingModule app-routing.module.ts 设置路由出口: 设置...

  • React+ts+hooks结合UerContext和useRe

    1、首先创建store文件,有reducer.ts和state.ts文件2、在state.ts中创建需要存储的数据...

  • typescript 入门教程二

    ts中面向对象成员修饰符:public , private , protexted(ts官方网站:ts) 在ts中...

  • TS1 基本语法

    ts 指令 基本用法 object 函数 数组 元组 tuple(固定长度的数组) 枚举 enum 或 | 与 ...

  • 使用ts和vue开发一个应用

    工程创建 基础用法 mixin的使用 mixin-one.ts App.vue 项目代码:https://gith...

  • TS中的类和接口

  • typeScript语法

    ts类型 ts联合类型使用或 ts定义任意类型any ts定义函数返回值的类型 ts中的类定义 interface接口

  • ts中type 和 interface

    如果你简历上的技能有写 TypeScript,那么面试官可能会问你 type 和 interface 之间有什么区...

网友评论

      本文标题:TS中的!和?用法

      本文链接:https://www.haomeiwen.com/subject/rvnsfltx.html