"```markdown
TypeScript 高级类型
TypeScript 提供了一系列强大的高级类型,帮助开发者更好地控制类型和约束。以下是一些常用的高级类型及其应用。
1. 联合类型 (Union Types)
联合类型允许一个变量可以是多种类型之一。可以使用 | 符号来定义。
function formatValue(value: string | number) {
return value.toString();
}
2. 交叉类型 (Intersection Types)
交叉类型将多个类型合并为一个类型,使用 & 符号。
interface User {
name: string;
}
interface Admin {
role: string;
}
type AdminUser = User & Admin;
const admin: AdminUser = {
name: \"Alice\",
role: \"Administrator\"
};
3. 类型别名 (Type Aliases)
类型别名允许你为复杂类型创建简短的名称。
type Point = {
x: number;
y: number;
};
const point: Point = { x: 10, y: 20 };
4. 字面量类型 (Literal Types)
字面量类型可以限制变量的值为特定的字面量。
type Direction = \"left\" | \"right\";
function move(direction: Direction) {
console.log(`Moving ${direction}`);
}
5. 映射类型 (Mapped Types)
映射类型通过遍历已有类型的属性来创建新类型。
type Person = {
name: string;
age: number;
};
type ReadOnly<T> = {
readonly [K in keyof T]: T[K];
};
type ReadOnlyPerson = ReadOnly<Person>;
6. 条件类型 (Conditional Types)
条件类型根据某个类型的条件来选择不同的类型。
type IsString<T> = T extends string ? \"Yes\" : \"No\";
type Test1 = IsString<string>; // \"Yes\"
type Test2 = IsString<number>; // \"No\"
7. 索引类型 (Index Types)
索引类型允许使用对象的键来获取对应的值类型。
type Person = {
name: string;
age: number;
};
type PersonKeys = keyof Person; // \"name\" | \"age\"
8. ReturnType 和 Parameters 类型
ReturnType 用于获取函数返回值的类型,Parameters 用于获取函数参数的类型。
function add(a: number, b: number): number {
return a + b;
}
type AddReturnType = ReturnType<typeof add>; // number
type AddParameters = Parameters<typeof add>; // [number, number]
9. Partial 和 Required 类型
Partial 将所有属性设为可选,Required 将所有属性设为必填。
interface User {
name: string;
age?: number;
}
type PartialUser = Partial<User>; // { name?: string; age?: number; }
type RequiredUser = Required<User>; // { name: string; age: number; }
10. Pick 和 Omit 类型
Pick 用于从一个类型中选择部分属性,Omit 用于从一个类型中排除部分属性。
interface User {
name: string;
age: number;
email: string;
}
type UserNameAndEmail = Pick<User, \"name\" | \"email\">;
type UserWithoutAge = Omit<User, \"age\">;