索引类型(Index Types)是 TypeScript 中的一种高级类型特性,它允许我们通过字符串或数字索引对象的属性来进行类型操作。通过索引类型,我们可以根据对象中的键名来确定相应的键值类型。
索引类型有两种形式:字符串索引类型和数字索引类型。
keyof
和索引签名[key: string]
,我们可以获取对象的所有键名,然后根据键名获取相应的键值类型。示例代码:
type Person = {
name: string;
age: number;
gender: string;
};
type PersonKeys = keyof Person; // "name" | "age" | "gender"
type PersonData = {
[key in PersonKeys]: string;
};
// 等价于
// type PersonData = {
// name: string;
// age: string;
// gender: string;
// };
在上述示例中,PersonKeys
类型获取了Person
对象的所有键名,PersonData
类型使用了索引类型,将所有键值类型都设为了字符串类型。
keyof
和索引签名[key: number]
,我们可以获取对象的所有键名,然后根据键名获取相应的键值类型。示例代码:
type Ratings = {
1: "bad";
2: "average";
3: "good";
4: "excellent";
};
type RatingKeys = keyof Ratings; // "1" | "2" | "3" | "4"
type RatingValues = Ratings[RatingKeys]; // "bad" | "average" | "good" | "excellent"
在上述示例中,RatingKeys
类型获取了Ratings
对象的所有键名,RatingValues
类型根据键名获取了相应的键值类型。
泛型函数值(Generic Function Values)指的是具有泛型类型参数的函数值,可以将泛型类型参数用作函数参数类型或返回值类型,从而使函数具有更大的灵活性和通用性。
示例代码:
type FilterFunction<T> = (value: T, index?: number, array?: T[]) => boolean;
function filter<T>(array: T[], callback: FilterFunction<T>): T[] {
const result: T[] = [];
for (let i = 0; i < array.length; i++) {
if (callback(array[i], i, array)) {
result.push(array[i]);
}
}
return result;
}
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = filter(numbers, (value) => value % 2 === 0);
console.log(evenNumbers); // [2, 4]
在上述示例中,FilterFunction
是一个泛型类型参数为T
的函数类型,filter
函数接受一个数组和一个符合FilterFunction<T>
类型的回调函数作为参数,然后根据回调函数的返回值对数组进行过滤,并返回过滤后的结果数组。
索引类型和泛型函数值在实际开发中都具有广泛的应用场景,可以用于提高代码的可复用性和灵活性。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云