- 交叉类型(Intersection Types)
 交叉类型是将多个类型合并为一个类型。这通过 & 符号实现。
typescript
 type Combined = Type1 & Type2 & Type3;
 例如,一个对象可能同时拥有多个接口所定义的属性:
typescript
 interface ErrorHandling {
 success: boolean;
 error?: string;
 }
interface ArtData {
 title: string;
 artist: string;
 }
type ArtWithData = ArtData & ErrorHandling;
let art: ArtWithData = {
 title: “Dance”,
 artist: “Vincent”,
 success: true,
 };
 13. 联合类型(Union Types)
 联合类型表示一个值可以是几种类型之一。使用 | 分隔每个类型。
typescript
 let id: number | string;
 id = 123;
 id = “123”;
 14. 字面量类型
 字面量类型允许你指定变量只能是特定的值。
typescript
 let color: “red” | “green” | “blue” = “blue”;
 15. 类型别名(Type Aliases)
 类型别名有时和接口很相似,但是可以作用于原始值、联合类型、交叉类型以及元组等任何类型。
typescript
 type Name = string;
 type NameOrAge = string | number;
 type PartialPerson = {
 name?: string;
 age?: number;
 };
 16. 索引签名(Index Signatures)
 索引签名可以定义对象上索引的类型。
typescript
 interface StringArray {
 [index: number]: string;
 }
let myArray: StringArray;
 myArray = [“Bob”, “Fred”];
let firstName: string = myArray[0];
 17. 映射类型(Mapped Types)
 映射类型是基于旧类型创建新类型的一种方式,它基于旧类型中的每个属性并应用某种转换以产生新的类型。
typescript
 type Keys = ‘a’ | ‘b’ | ‘c’;
 type OptionsFlags = { [K in Keys]: boolean };
 // type OptionsFlags = {
 // a: boolean;
 // b: boolean;
 // c: boolean;
 // }
 18. 条件类型(Conditional Types)
 条件类型允许你根据条件定义类型。
typescript
 type TypeName = T extends string ? ‘string’ :
 T extends number ? ‘number’ :
 T extends boolean ? ‘boolean’ :
 ‘object’;
type T1 = TypeName; // type T1 = “string”
 type T2 = TypeName; // type T2 = “number”
 19. 字符串字面量类型
 字符串字面量类型允许你指定字符串必须的固定值。
typescript
 type Easing = “ease-in” | “ease-out” | “ease-in-out”;
 20. 装饰器(Decorators)
 装饰器是一种特殊类型的声明,它可以被附加到类声明、方法、属性或参数上。装饰器使用 @expression 的形式,expression 必须是一个函数,它会在运行时被调用,被装饰的声明信息作为参数传入。
这只是一个TypeScript特性的简短列表,实际上TypeScript的功能非常丰富和强大。要深入学习TypeScript,建议阅读官方文档、教程和相关的书籍,以及参与实际的项目开发。