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

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

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

    interface Person {
      name: string;
      age?: number;
    }
    
    const person1: Person = { name: "John" };
    const person2: Person = { name: "Jane", age: 25 };
    

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

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

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

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

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

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

const value1 = null;
const value2 = 42;

const result1 = value1 ?? "Default Value"; // Output: Default Value
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');
function greet(person: Person) {
  console.log(`Hello, ${person.name.toUpperCase()}!`);
}

const person: Person = { name: "John" };
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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值