Disclosure

Most of the problems under my TypeHero Challenges folder were either obtained from typehero.dev or from type-challenges repo. Purpose of these articles are just to document my approaches for my easy reference. Please visit the respective links for more info.

Link to original

Problem Description

TypeScript 4.0 is recommended in this challenge

Implement a generic Last<T> that takes an Array T and returns its last element.

For example:

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

Solutions

Approach 1: Using infer

type Last<T extends any[]> = T extends [...any, infer LastElement] ? LastElement : never;

Approach 2: Without infer

type Last<T extends any[]> = [any, ...T][T['length']];