TypeScript 是一个强类型的 JavaScript 超集,提供了许多方便的操作符和语法糖,记录一下平时开发中遇到的特殊符号。
开头
?:可选属性/参数??:空值合并操作符?.:可选链操作符?::三元运算符!:非空断言操作符!!:将值转换为布尔值||:逻辑或操作符|:联合类型,表示一个值可以是多种类型之一&:交叉类型,表示一个值必须同时满足多种类型的要求
?(可选属性和可选参数)
-
可选属性: 用于定义接口或类型中的可选属性。如果某个属性可能不存在,可以使用
?来标记它。interface User { name: string; age?: number; // age是可选属性 } const user1: User = { name: "张三" }; const user2: User = { name: "张四", age: 25 }; -
可选参数: 用于函数参数,表示该参数是可选的。
function greet(name: string, age?: number) { if (age) { console.log(`你好, ${name}. 你今年 ${age} 了.`); } else { console.log(`你好, ${name}.`); } } greet("张三"); greet("张四", 25);
??(空值合并操作符)
用于当左侧操作数为null或undefined时,返回右侧操作数。否则,返回左侧操作数。
let name: string | null = null;
let defaultName = "游客";
let displayName = name ?? defaultName; // displayName的值为"游客"
?.(可选链操作符)
用于在访问对象属性时,如果对象为null或undefined,不会导致错误,而是返回undefined。
let user: { name?: string } = {};
console.log(user.name?.toUpperCase()); // 如果name不存在,不会抛出错误,而是返回undefined
?:(三元运算符)
条件运算符,用于根据条件表达式返回两个值之一。
let age = 18;
let message = age >= 18 ? "成年人" : "未成年人"; // 如果age大于或等于18,message为"成年人",否则为"未成年人"
!(非空断言操作符)
用于断言某个值不是null或undefined。即使类型系统认为该值可能为空,这个操作符告诉编译器你确定这个值是非空的。
let name: string | null = "张三";
console.log(name!.length); // 确定name不是null
!!(双重否定)
用于将任意值转换为布尔值。第一个!将值转换为其相反的布尔值,第二个!再将其转换回来。
let value = "Hello";
let isValuePresent = !!value; // isValuePresent的值为true
||(逻辑或操作符)
用于返回第一个为真的操作数。如果左侧操作数为假值(例如false、0、""、null、undefined),则返回右侧操作数。否则,返回左侧操作数。
let name = "";
let defaultName = "游客";
let displayName = name || defaultName; // displayName的值为"游客"
|(联合类型)
允许变量是多个类型中的任何一个,可以用来表示变量具有多种可能的类型。
let value: string | number;
value = "Hello"; // 合法
value = 42; // 合法
value = true; // 不合法,编译错误
&(交叉类型)
需要变量同时满足所有类型的要求,可以用来表示组合类型的所有属性和方法。
interface Person {
name: string;
}
interface Employee {
employeeId: number;
}
let employee: Person & Employee;
employee = {
name: "张三",
employeeId: 1234
}; // 合法
employee = {
name: "张三"
}; // 不合法,编译错误
employee = {
employeeId: 5678
}; // 不合法,编译错误