方法1
type A = [10,22,5,'abcd']
type Index<T, index> = T extends (string | number)[] ? index extends number ? T[index] : never : never;
type j = Index<A, 2>
const a: j=2
方法2
// 可以使用TS的索引类型和映射类型来实现这个工具方法,如下所示:
// typescript
type ArrayItem<T> = T;
type ArrayMap<T extends any[]> = {
// [K in keyof T]: K;
// [K in keyof T]: K;
[K in keyof T]:T[K]
};
type GetArrayItem<T extends any[], K extends keyof T> = ArrayMap<T>[K]
// ```
// 这段代码中,首先定义了一个`ArrayItem`类型,它是一个条件类型,用于获取数组中的元素类型。然后定义了一个`ArrayMap`类型,它是一个映射类型,用于将数组中的元素映射为一个包含相应类型的新数组类型。最后定义了一个`GetArrayItem`类型,它根据传入的数组和索引键获取对应的元素类型,如果索引键不合法则返回`never`类型。
//
// 使用这个工具方法,我们可以对任意长度的数组进行索引,如下所示:
type A = [10, 22, 5, 'abcd'];
type B = [boolean, string, number];
type fft = ArrayMap<A>;
type ff = GetArrayItem<A, 3>;
type ArrayMap<T extends any[]> = {
// [K in keyof T]: K;
// 为了防止索引溢出
[K in keyof T]: K extends string ? T[K]: never
};
这里有一个方法没有搞懂 为什么 K 是 extends 的 string 而 extends number 就不可以?