• typescript里面一个问号(?)两个问号(??)一个感叹号(!)两个感叹号(!!)的用法和区别。


    1.. 一个问号(?)在 TypeScript 中用于表示可选属性和可选参数,使得属性和参数可以选择性地存在。

    1. 可选属性: 在对象类型中,可以使用问号来标记某个属性是可选的。这意味着该属性可以存在,也可以不存在。例如:

      1. interface Person {
      2. name: string;
      3. age?: number;
      4. }
      5. const person1: Person = { name: "John" };
      6. const person2: Person = { name: "Jane", age: 25 };

      在上面的例子中,age 属性被标记为可选,因此可以在对象中选择性地包含它。

    2. 可选参数: 在函数的参数列表中,可以使用问号来标记某个参数是可选的。这意味着在调用函数时,可以选择性地省略该参数。例如:

      1. function greet(name: string, age?: number) {
      2. console.log(`Hello, ${name}! You are ${age} years old.`);
      3. }
      4. greet("John"); // 输出:Hello, John! You are undefined years old.
      5. greet("Jane", 25); // 输出:Hello, Jane! You are 25 years old.

      在上面的例子中,age 参数被标记为可选,因此可以选择性地在函数调用中省略它。

    2. 两个问号(??)表示一个空值合并运算符

    两个问号(??)是一个空值合并运算符,用于检查一个值是否为null或undefined,并在其为null或undefined时提供一个默认值。例如、

    1. const value1 = null;
    2. const value2 = 42;
    3. const result1 = value1 ?? "Default Value"; // Output: Default Value
    4. const result2 = value2 ?? "Default Value"; // Output: 42

    3. 一个感叹号

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

    一元运算符

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

    成员

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

    强制链式调用

    叹号(!)是一种非空断言操作符(non-null assertion operator)。它告诉编译器,表达式的结果不会为 null 或 undefined,即使它的类型可能允许为 null 或 undefined。它用于在编译时绕过TypeScript的类型检查。
    // 我们确信这个字段100%出现,那么就可以添加!,强调这个字段一定存在
    new Error().stack!.split('\n');
    1. function greet(person: Person) {
    2. console.log(`Hello, ${person.name.toUpperCase()}!`);
    3. }
    4. const person: Person = { name: "John" };
    5. greet(person!);

    在上述例子中,我们使用感叹号(!)告诉编译器person对象肯定不为null或undefined,以便在调用greet函数时可以安全地访问name属性。

    4.两个感叹号(!!)

    let is_valid = !!test;   在TypeScript中,这种用法是将变量test转换为布尔类型,并将结果赋值给变量is_valid!!是逻辑非运算符的两次连续使用,它会将变量转换为布尔类型的值。如果test的值为真,则is_valid将被赋值为true;如果test的值为假,则is_valid将被赋值为false。这种用法可以用于简单地判断一个变量是否有值或是否为真。

    1. double !!,
    • convert non-Boolean to Boolean,
    • empty to false, non-empty to truth

    Double exclamation marks !! in TypeScript
    While we’re on the topic of the exclamation mark !, TypeScript also uses double exclamation marks !! to convert (also called cast) non-Boolean type values to Boolean type. Here’s an example:

    const emptyStr = ''
    const nonEmptyStr = 'test'
    
    const emptyStrBool = !!emptyStr //false
    const nonEmptyStrBool = !!nonEmptyStr //true
  • 相关阅读:
    这3款免费的Word转PDF转换器软件,建议收藏使用
    phpexcel 安装流程
    跑步时戴什么耳机好,五款最适合跑步佩戴的耳机推荐
    目标检测论文解读复现之十九:基于YOLOv5网络模型的人员口罩佩戴实时检测
    【springboot】19、数据库操作
    java11中String类,StringBuffer类和StringBuilder类区别
    SpringBoot的数据库连接池
    【ubuntu18.04安装rabbitmq】
    vue: 使用下拉树组件@riophae/vue-treeselect
    15 万奖金!开放原子开源大赛OpenAnolis 赛题@你报名
  • 原文地址:https://blog.csdn.net/zwjapple/article/details/134400035