TypeScript细碎知识点:?, ??, !, !!

🐹 1. 一个问号(?)

在 TypeScript 中用于表示可选属性和可选参数,使得属性和参数可以选择性地存在。主打的就是两个字“随意

🐡 可选属性: 在对象类型中,可以使用问号来标记某个属性是可选的。这意味着该属性可以存在,也可以不存在。
interface Person {
    name: string;
    age?: number;
}

//可以不实现age属性
const person1: Person = { name: "John" };
//可以实现age属性
const person2: Person = { name: "Jane", age: 25 };
在上面的例子中,age 属性被标记为可选,因此可以在对象中选择性地包含它。
🐡 可选参数: 在函数的参数列表中,可以使用问号来标记某个参数是可选的。这意味着在调用函数时,可以选择性地省略该参数。
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 value  = undefined
const value1 = null;
const value2 = 42;

/*表示当??的左侧为null和undefined时, 返回右侧的数*/
const result = value ?? "Default Value"; //结果:Default Value
const result1 = value1 ?? "Default Value"; //结果:Default Value
const result2 = value2 ?? "Default Value"; //结果:42

🐹 3. 一个感叹号(!)

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

🐡 一元运算符

! 就是将之后的结果取反

function isNumber (param: any): boolean {
    return typeof param === 'number'
}
// 当 isNumber(input) 为 True 时返回 False; isNumber(input) 为 False 时返回True
const a = !isNumber('我是字符串');
🐡 属性或参数中使用!表示表示强制解析(告诉typescript编译器,这里一定有值)

? 让类属性为可选属性,可以不传,!可以当这个属性不存在时返回undefined而不是报错

interface A {
    x?: number //该属性是可选,可以不传
}
const demo = (parma: A) => {
    const y:number = parma.x!  // !告诉编译器,这个属性虽然是可选类型,但是它一定有值,可以赋值给y
    return y
}
console.log(demo({}))          // 没有传x, 输出: undefined
console.log(demo({x: 3}))      // 输出: 3

🐹 4. 两个感叹号(!!)

表示将把表达式 【强行转换】 为 bool

console.log(!!(0 + 0)) // 输出: false
console.log(!!(3 * 3)) // 输出: true
console.log(!!('aaaa')) // 输出: true
console.log(!!('')) // 输出: false

posted on 2024-11-13 15:08  梁飞宇  阅读(289)  评论(0)    收藏  举报