type Last<T extends any[]> = T extends [...infer P, infer L] ? L : never;
Solution by nupthale #33581
type Last<T extends any[]> = T extends [infer F, ...infer Rest] ? Rest[number] extends never ? F : Last<Rest> : never
Solution by Flavour86 #33449
// 你的答案
type Last<T extends any[]> = T extends [...infer P, infer R] ? R : never
Solution by shaobeichen #33372
type Last<T extends any[]> = T extends [...args: any[], infer R] ? R : never;
Solution by chenghao125 #33296
// your answers
type Last<T extends unknown[]> = T extends [...unknown[], infer Last] ? Last : never
Solution by KeithChou #33133
type Last<T extends unknown[]> = T['length'] extends [0]['length']
? T[0]
: T extends [any, ...any, infer Last]
? Last
: never;
Solution by Taneros #32974
// 你的答案
type Last<T extends any[]> = T extends [infer F,...infer O] ? O extends [] ? F : Last<O>
: never
Solution by walker-hzx #32935
/*
解法一 与14First相反
举例来说,如果你有 type arr1 = ['a', 'b', 'c'],那么 Last<arr1> 类型就相当于 ['any', 'a', 'b', 'c'],
然后取 arr1.length(3)作为索引,也就是数组的最后一个元素 'c',所以 Last<arr1> 的结果类型就是 'c'。
*/
type Last<T extends any[]> = [any, ...T][T['length']]
Solution by CAN1177 #32857
// 解答をここに記入
type Last<T extends any[]> = T extends [...infer A, infer B]
? B
: never;
infer A
に集約。infer B
に当てはめ。Solution by Yasunori-aloha #32824
type Last<T extends any[]> = T extends [...infer F, infer L] ? L : never;
Solution by ZhipengYang0605 #32798
type Last<T> = T extends [...args:any[], infer S] ? S : never;
Solution by malyanoff #32779
type Last<T extends any[]> =T extends [...infer first , infer last] ? last :never
Solution by bananana0118 #32733
type Last<T extends unknown[]> = T extends [...infer Prev, infer Last] ? Last : never
type arr1 = ['a', 'b', 'c']
type arr2 = [3, 2, 1]
type tail1 = Last<arr1> // expected to be 'c'
type tail2 = Last<arr2> // expected to be 1
Solution by ZhulinskiiDanil #32671
这道题又完全想偏了,一开始采用 car & cdr 的链表思维,通过递归实现:
type Last<T> = T[1] extends T[number] ? Last<Omit<T, 0>> : T[0];
但是这样根本递归不了,因为没有办法构建出一个新数组类型传给下层。
后来看了题目,提醒用 TS 4.0,就去查了一下 4.0 支持的新语法 ...
符号。折磨一通,结果如下:
type Last<T extends unknown[], L extends T[number]> = [...T, L] extends T ? L : never;
看了别人的答案之后,才发现,原来如此简单。解决思路就是利用 ...
符号,任意添加一个元素,构建一个新 Tuple 类型,把原来的 Tuple 追加到后面。那么原来 Tuple 的 length
就刚好指向新 Tuple 的最后一个元素。这个元素也是 原 Tuple 的最后一个元素。
type Last<T extends readonly unknown[]> = [unknown, ...T][T['length']];
Solution by mistkafka #32640
// 你的答案
T extends [...infer U, infer P] ? P : never;
Solution by DOIT008 #32527
// your answers
type Last<T extends any[]> = T extends [...any[],infer R] ? R :never
Solution by YuFengDing #32526
type Last<T extends any[]> = T extends [...rest:any[],infer L] ? L: never;
Solution by samyakrt #32509
// your answers
type arr11 = ['a', 'b', 'c']
type arr22 = [3, 2, 1]
type LastOfArray<T extends any[]> = T extends [...infer R, infer L] ? L : never
type a = LastOfArray<arr11> // expected to be 'c'
type b = LastOfArray<arr22> // expected to be 1
Solution by laqudee #32345
type Last<TArray extends unknown[]> = TArray extends [...infer Rest, infer Last]
? Last
: never
Solution by LwveMike #32245
type Last<T extends unknown[]> = T extends [unknown, ...infer Rest] ? T[Rest['length']] : never;
Solution by dev-hobin #32229
type Last<T extends any[]> =
T extends [...any, infer L]
? L
: never
We check if we can infer a last element from T if this extends from an array that have at least one element, if that is the case, then we type as the already inferred type L
, otherwise we type as never
Solution by joyanedel #32152
// your answers
type Last<T extends any[]> = T extends [...any[], infer Last] ? Last : any
Solution by trinhvinhtruong96 #32066
type Last<T extends unknown[]> = [unknown, ...T][T["length"]]
Solution by rkamely #32053
type Last<T extends any[]> = T["length"] extends 1
? T extends [infer F]
? F
: never
: T extends [infer _, ...infer L]
? Last<L>
: never;
Solution by gasmg #32003
type Last<T extends any[]> = T extends [infer F, ...infer R] ? R["length"] extends 0 ? F : Last<R> : never
Solution by dbfu #31996
type Last<T extends any[]> = T extends [...infer _, infer L] ? L : never
Solution by Tap-Kim #31991
// your answers
type Last<T extends any[]> = T extends [infer First, ...infer Rest] ? Rest extends never[] ? First : Last<Rest> : never;
Solution by nkeyy0 #31891
// your answers
type Last<T extends any[]> = T extends [...any[],infer U]? U:never;
Solution by pea-sys #31873
type arr1 = ['a', 'b', 'c']
type arr2 = [3, 2, 1]
type tail1 = Last<arr1> // expected to be 'c'
type tail2 = Last<arr2> // expected to be 1
type Last<A extends unknown[]> = A extends [...unknown[], infer U] ? U : never
Solution by anovicenko74 #31769
type Last<T extends any[]> = T extends [...any, infer L] ? L : never;
Solution by kai-phan #31621