zoukankan      html  css  js  c++  java
  • TypeScript中的问号 ? 与感叹号 ! 的含义

    一、?(问号)操作符

      在TypeScript里面,有4个地方会出现问号操作符,他们分别是:

    1、三元运算符

    // 当 isNumber(input) 为 True 是返回 ? : 之间的部分; isNumber(input) 为 False 时,返回 : ; 之间的部分
    const a = isNumber(input) ? input : String(input);

    2、参数

    // 这里的 ?表示这个参数 field 是一个可选参数
    function getUser(user: string, field?: string) { }

    3、成员

    // 这里的?表示这个name属性有可能不存在
    class A {
      name?: string
    }
    
    interface B {
      name?: string
    }

    4、安全链式调用

    // 这里 Error对象定义的stack是可选参数,如果这样写的话编译器会提示
    // 出错 TS2532: Object is possibly 'undefined'.
    return new Error().stack.split('
    ');
    
    // 我们可以添加?操作符,当stack属性存在时,调用 stack.split。若stack不存在,则返回空
    return new Error().stack?.split('
    ');
    
    // 以上代码等同以下代码
    const err = new Error();
    return err.stack && err.stack.split('
    ');

    二、!(感叹号)操作符

      在TypeScript里面有3个地方会出现感叹号操作符,他们分别是:

    1、一元运算符

    // ! 就是将之后的结果取反,比如:
    // 当 isNumber(input) 为 True 时返回 False; isNumber(input) 为 False 时返回True
    const a = !isNumber(input);

    2、成员

    // 因为接口B里面name被定义为可空的值,但是实际情况是不为空的,那么我们就可以
    // 通过在class里面使用!,重新强调了name这个不为空值
    class A implemented B {
      name!: string
    }
    
    interface B {
      name?: string
    }

    3、强制链式调用

    // 这里 Error对象定义的stack是可选参数,如果这样写的话编译器会提示
    // 出错 TS2532: Object is possibly 'undefined'.
    new Error().stack.split('
    ');
    
    // 我们确信这个字段100%出现,那么就可以添加!,强调这个字段一定存在
    new Error().stack!.split('
    ');
  • 相关阅读:
    MySQL高级(十五)--- 主从复制
    MySQL高级(十四)--- 行锁
    MySQL高级(十三)--- 表锁
    MySQL高级(十二)--- 全局查询日志
    MySQL高级知识(十一)--- Show Profile
    MySQL高级(十)--- 批量插入数据脚本
    MySQL高级(九)--- 慢查询日志
    MySQL高级(八)--- ORDER BY优化
    MySQL高级(七)--- 索引面试题分析
    SpringBoot系列教程web篇之如何自定义参数解析器
  • 原文地址:https://www.cnblogs.com/gg-qq/p/14649871.html
Copyright © 2011-2022 走看看