?.
(Optional Chaining可选链操作符)
可选链操作符 (?.
) 安全地访问对象嵌套属性,避免属性不存在时抛出错误。
const user = { profile: { name: 'Alice' } };
const userName = user?.profile?.name;
console.log(userName); // 输出 'Alice'
!
(Non-null Assertion非空断言操作符)
非空断言操作符 (!
) 在TypeScript中用于告诉编译器某个值不会是 null
或 undefined
。
let myValue: string | null;
myValue = 'hello';
console.log(myValue!.toUpperCase()); // 输出 'HELLO'
空值合并操作符 (??
)
空值合并操作符用于当左侧操作数为 null
或 undefined
时,返回右侧操作数。
let value = foo ?? 'default value';
类型断言 (as
和 <type>
)
类型断言用于明确告诉编译器某个值的类型。
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
类型保护 (is
和 typeof
)
类型保护用于在运行时检查和区分不同的类型。
function isString(value: any): value is string {
return typeof value === 'string';
}
联合类型 (|
) 和 交叉类型 (&
)
联合类型表示一个值可以是几种类型中的一种,而交叉类型表示一个值必须同时具有多种类型。
type UnionType = string | number;
type IntersectionType = { id: number } & { name: string };
可选属性 (?
)
在接口或类型定义中,表示属性是可选的。
interface Person {
name: string;
age?: number;
}
索引签名 ([key: type]: type
)
用于定义对象可以有任意数量的属性。
interface StringArray {
[index: number]: string;
}
泛型 (<T>
)
泛型用于创建可重用的组件,支持任意类型。
function identity<T>(arg: T): T {
return arg;
}