「重学TS 2.0 」TS 练习题第十三题
Opened this issue · 20 comments
实现一个 Tail
工具类型,用于获取数组类型除了第一个类型外,剩余的类型。具体的使用示例如下所示:
type Tail<T extends Array<any>> = // 你的实现代码
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
提示:该题目有多种解法,感兴趣小伙伴可以自行尝试一下。
请在下面评论你的答案。
type Tail<T extends Array<any>> = T extends [infer A, ...infer B] ? B : [];
// 测试用例
type T0 = Tail<[]>; // []
type T1 = Tail<[1, 2]>; // [2]
type T2 = Tail<[1, 2, 3, 4, 5]>; // [2, 3, 4, 5]
// 第三道
type Tail<T extends Array<any>> = T extends [f: any, ...rest: infer U] ? U : [];
// 测试用例
type T0 = Tail<[]>; // []
type T1 = Tail<[1, 2]>; // [2]
type T2 = Tail<[1, 2, 3, 4, 5]>; // [2, 3, 4, 5]
type Tail<T extends Array<any>> = ((...t: T) => void) extends (h: any, ...args: infer R) => void? R : never
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
type Tail<T extends Array<any>> = T extends [] ? [] : (T extends [any, ...infer Rest] ? Rest : never) // 你的实现代码
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
type Tail<T extends Array<any>> = T extends [any, ... infer Rest] ? Rest : []; // 你的实现代码
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
type Tail<T extends Array> = T extends [infer F, ...infer R] ? R : never
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
type Tail<T extends Array<any>> = T extends [fir: infer U, ...arg: infer Arg] ? Arg : []
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
type Tail<T extends Array<any>> = // 你的实现代码 // 测试用例 type T0 = Tail<[]> // [] type T1 = Tail<[1, 2]> // [2] type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
type Tail<T extends Array<any>> = T extends [infer F, ...infer Rest] ? Rest : [];
// 实现一个 Tail 工具类型,用于获取数组类型除了第一个类型外,剩余的类型。具体的使用示例如下所示:
type Tail<T extends Array<any>> = T extends [infer A, ...infer B] ? B : [];
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
利用数组形状直接infer 配合extends获取后面的部分。
type Tail<T extends Array<any>> = T extends [infer F, ...infer Rest] ? Rest : [] // 你的实现代码
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
export default {}
// 实现一个 Tail 工具类型,用于获取数组类型除了第一个类型外,剩余的类型。具体的使用示例如下所示:
type Tail<T extends Array> = T extends [infer L, ...infer R] ? R : []
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
type Tail<T extends any[]> = T extends [infer F, ...infer O] ? O : [];
type Tail<T extends any[]> = T extends [any, ...infer Rest] ? Rest : []
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
type T3 = Tail<[1]> // []
type Tail<T extends Array> = T extends [infer H, ...infer O] ? O : []
type Tail<T extends Array<any>> =
T extends [any, ...infer Rest]
? Rest
: []
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]
// 解法1, infer指代rest参数来求解
type Tail<T extends Array<any>> = T extends [a: any, ...r: infer K] ? K : []
貌似就一个解法...
type Tail<T extends Array> = T extends [T[0], ...infer K] ? K : []; // 你的实现代码
type Tail<T extends Array<any>> = T extends [infer A, ...infer B] ? B : []; // 你的实现代码
// 测试用例
type T0 = Tail<[]>; // []
type T1 = Tail<[1, 2]>; // [2]
type T2 = Tail<[1, 2, 3, 4, 5]>; // [2, 3, 4, 5]
type Tail<T extends Array<any>> = T extends [infer A, ...infer B] ? B : []; // 测试用例 type T0 = Tail<[]>; // [] type T1 = Tail<[1, 2]>; // [2] type T2 = Tail<[1, 2, 3, 4, 5]>; // [2, 3, 4, 5]
@semlinker 你好,除了这种Rest的方法,还有更多的解法吗
type Tail<T extends Array<any>> = T extends [infer F, ...infer R] ? R : [];
// 测试用例
type T0 = Tail<[]> // []
type T1 = Tail<[1, 2]> // [2]
type T2 = Tail<[1, 2, 3, 4, 5]> // [2, 3, 4, 5]