在 TypeScript 中,可以使用多种高级函数和类型来处理类型数组。以下是一些常见的高级函数和类型处理方法:
高级函数
1. forEach
forEach 用于遍历数组中的每一项。
const arr = [1, 2, 3];
arr.forEach((item, index, self) => {
console.log(item, index, self);
});2. map
map 用于创建一个新数组,其结果是对原数组中的每个元素调用一个提供的函数后的返回值。
const arr = [1, 2, 3];
const newArr = arr.map((item, index, self) => item * 2);
console.log(newArr); // [2, 4, 6]高级类型
1. ReadonlyArray
ReadonlyArray 用于创建一个只读数组,防止对数组的修改。
const arr: ReadonlyArray<string> = ['杜兰特', '欧文', '科比', '乌布雷'];
// arr[0] = '詹姆斯'; // 错误: 无法分配到 "0" ,因为它是只读属性2. Exclude
Exclude 用于从联合类型中排除某些类型。
type havTypes = 'name' | 'age' | 'sex';
type someTypes = Exclude<havTypes, 'sex'>;
const myTypes1: someTypes = 'name'; // 可以
// const myTypes2: someTypes = 'sex'; // 错误: 不能将类型“"sex"”分配给类型“someTypes”3. Omit
Omit 用于从类型中排除某些属性。
interface People {
name: string;
age: number;
}
type somePeople = Omit<People, 'name'>;
const person: somePeople = { age: 30 }; // 正确
// const person2: somePeople = { name: '张三', age: 30 }; // 错误: 类型“{ name: string; age: number; }”中缺少属性“name”4. Partial
Partial 用于将类型的所有属性变为可选。
interface Person {
name: string;
age: number;
}
let person: Partial<Person> = {};
person = { name: '张三' }; // 正确5. Record
Record 用于将一个类型的所有属性映射到另一个类型。
type Person = 'name' | 'age';
type PersonInfo = Record<Person, string>;
const personInfo: PersonInfo = {
name: '张三',
age: '30'
};6. Uppercase, Lowercase, Capitalize, Uncapitalize
这些类型用于字符串字面量类型的转换。
type NewType1 = Uppercase<'aaa'>; // AAA
type NewType2 = Lowercase<'AAA'>; // aaa
type NewType3 = Capitalize<'aaa'>; // Aaa
type NewType4 = Uncapitalize<'AAA'>; // aAA7. keyof 和 get 函数
keyof 用于获取对象类型的键,get 函数用于获取对象的属性值。
interface People5 {
name: string;
age: number;
}
type keys = keyof People5; // "name" | "age"
const xiaozhang: People5 = { name: '小张', age: 12 };
function get<T extends object, K extends keyof T>(o: T, name: K): T[K] {
return o[name];
}
console.log(get(xiaozhang, 'age')); // 12这些高级函数和类型可以帮助你在 TypeScript 中更灵活地处理类型数组和对象,提升代码的可读性和可维护性[1][2][3][4][5]。
Citations: [1] https://blog.csdn.net/weixin_73904746/article/details/128963748 [2] https://jedxu.info/coding/typescriptadvancedtypes/ [3] https://blog.csdn.net/qq_48617322/article/details/128746889 [4] https://juejin.cn/post/6985296521495314445 [5] https://www.tslang.cn/docs/handbook/advanced-types.html