awesome-typescript
awesome-typescript copied to clipboard
「重学TS 2.0 」TS 练习题第十二题
实现一个 Head
工具类型,用于获取数组类型的第一个类型。具体的使用示例如下所示:
type Head<T extends Array<any>> = // 你的实现代码
// 测试用例
type H0 = Head<[]> // never
type H1 = Head<[1]> // 1
type H2 = Head<[3, 2]> // 3
提示:该题目有多种解法,感兴趣小伙伴可以自行尝试一下。 请在下面评论你的答案。
type Head<T extends Array<any>> = T extends [] ? never : T[0];
// 测试用例
type H0 = Head<[]>; // never
type H1 = Head<[1]>; // 1
type H2 = Head<[3, 2]>; // 3
// 第二道
type Head<T extends Array<any>> = T extends [f: infer U, ...rest: any[]] ? U : never;
// 测试用例
type H0 = Head<[]>; // never
type H1 = Head<[1]>; // 1
type H2 = Head<[3, 2]>; // 3
type Head<T extends Array<any>> = T[0] extends undefined ? never : T[0]
type Head<T extends Array<any>> = undefined extends T[0] ? never :
((...t: T) => void) extends (h: infer A, ...args: any[]) => void? A : never
// 测试用例
type H0 = Head<[]> // never
type H1 = Head<[1]> // 1
type H2 = Head<[3, 2]> // 3
type NonEmptyArray = [any, ...any[]]; //非空数组
type Head<T extends any[]> = T extends NonEmptyArray ? T[0] : never
// 测试用例
type H0 = Head<[]> // never
type H1 = Head<[1]> // 1
type H2 = Head<[3, 2]> // 3
type Head <T extends any[]> = T['length'] extends 0 ? never : T[0];
type Head <T extends any[]> = T extends [head : infer H, ...rest : any[]] ? H : never;
type H0 = Head<[]> // never
type H1 = Head<[1]> // 1
type H2 = Head<[3, 2]> // 3
type H3 = Head<["a", "b", "c"]> // "a"
type H4 = Head<[undefined, "b", "c"]> // undefined
type H5 = Head<[null, "b", "c"]> // null
type Head<T extends Array<any>> = T extends [infer First, ...any[]] ? First : never;
// 测试用例
type H0 = Head<[]>; // never
type H1 = Head<[1]>; // 1
type H2 = Head<[3, 2]>; // 3
type Head<T extends Array
type Head<T extends Array<any>> = T extends [...arg: infer Arg] ? Arg[0] extends undefined ? never : Arg[0] : never
// 测试用例
type H0 = Head<[]> // never
type H1 = Head<[1]> // 1
type H2 = Head<[3, 2]> // 3
type Head<T extends Array<any>> = // 你的实现代码 // 测试用例 type H0 = Head<[]> // never type H1 = Head<[1]> // 1 type H2 = Head<[3, 2]> // 3
type Head<T extends Array<any>> = T[0] extends undefined ? never : T[0];
type Head<T extends Array<any>> = Extract<T[number], T[0]>; // 你的实现代码
// 测试用例
type H0 = Head<[]>; // never
type H1 = Head<[1]>; // 1
type H2 = Head<[3, 2]>; // 3
// 实现一个 Head 工具类型,用于获取数组类型的第一个类型。具体的使用示例如下所示:
// 解法1 根据数组形状来获取
// type Head<T extends Array<any>> = T extends [infer F, ...infer Rest] ? F : never;
// 解法2 确保数组不为空的之后,直接通过索引0获取
type Head<T extends Array<any>> = T["length"] extends 0 ? never : T[0];
// 测试用例
type H0 = Head<[]> // never
type H1 = Head<[1]> // 1
type H2 = Head<[3, 2]> // 3
type Head<T extends Array> = T extends [infer R, ...infer Rest] ? R : never // 你的实现代码
// 测试用例
type H0 = Head<[]>; // never
type H1 = Head<[1]>; // 1
type H2 = Head<[3, 2]>; // 3
export default {}
// 实现一个 Head 工具类型,用于获取数组类型的第一个类型。具体的使用示例如下所示:
type Head<T extends Array
// 测试用例 type H0 = Head<[]> // never type H1 = Head<[1]> // 1 type H2 = Head<[3, 2]> // 3
type Head<T extends any[]> = T extends [infer F, ...infer O] ? F : never;
// 12
type Head<T extends Array
// 测试用例 type H0 = Head<[]> // never type H1 = Head<[1]> // 1 type H2 = Head<[3, 2]> // 3
type Head<T extends any[]> = T extends [infer One, ...any[]] ? One : never
type Head<T extends Array
type Head<T extends any[]> = T extends [infer H, ...infer B] ? H : never type H0 = Head<[]> // never type H1 = Head<[1]> // 1 type H2 = Head<[3, 2]> // 3 type H3 = Head<["a", "b", "c"]> // "a" type H4 = Head<[undefined, "b", "c"]> // undefined type H5 = Head<[null, "b", "c"]> // null
type Head<T extends Array<any>> = // 你的实现代码
// 测试用例
type H0 = Head<[]> // never
type H1 = Head<[1]> // 1
type H2 = Head<[3, 2]> // 3
// 解法1: 使用infer来取出类型并返回
type Head<T extends Array<any>> = T extends [f: infer K, ...r: any[]] ? K : never
// 解法2: 如果T是空数组, 则返回never, 否则返回T0
type Head1<T extends Array<any>> = T extends [] ? never : T[0]
平安已经收到你的邮件啦
type Head<T extends Array<any>> = T extends {0:any}? T[0] : never
type Head<T extends Array<any>> = T[0] extends undefined ? never : T[0]
平安已经收到你的邮件啦
javascript
// 解一:
// type Head<T extends Array
// 解二:
// type Head<T extends Array
// 解三: // type Head<T extends any[]> = T['length'] extends 0 ? never : T[0];
// 解四: type Head<T extends any[]> = T[0] extends T[number] ? T[0] : never;
// 测试用例
type H0 = Head<[]>; // never
type H1 = Head<[1]>; // 1
type H2 = Head<[3, 2]>; // 3
javascript
// 解一:
// type Head<T extends Array<any>> = T extends [infer First, ...infer Reset]
// ? First
// : never;
// 解二:
// type Head<T extends Array<any>> = T extends [] ? never : T[0];
// 解三:
// type Head<T extends any[]> = T['length'] extends 0 ? never : T[0];
// 解四:
type Head<T extends any[]> = T[0] extends T[number] ? T[0] : never;
// 测试用例
type H0 = Head<[]>; // never
type H1 = Head<[1]>; // 1
type H2 = Head<[3, 2]>; // 3
type Head<T extends any[]> = T extends {0: infer P}? P : never;
type Head<T extends Array<any>> = T extends [infer A, ...infer B] ? A : never; // 你的实现代码
// 测试用例
type H0 = Head<[]>; // never
type H1 = Head<[1]>; // 1
type H2 = Head<[3, 2]>; // 3
type Head<T extends Array<any>> = T extends [infer F, ...infer Rest] ? F : never;