import {expectType} from 'tsd'; import type {LastArrayElement} from '../index'; declare function lastOf(array: V): LastArrayElement; const array: ['foo', 2, 'bar'] = ['foo', 2, 'bar']; const mixedArray: ['bar', 'foo', 2] = ['bar', 'foo', 2]; expectType<'bar'>(lastOf(array)); expectType<2>(lastOf(mixedArray)); expectType(lastOf(['a', 'b', 'c'])); expectType(lastOf(['a', 'b', 1])); expectType<1>(lastOf(['a', 'b', 1] as const)); declare const leadingSpreadTuple: [...string[], object, number]; expectType(lastOf(leadingSpreadTuple)); declare const trailingSpreadTuple1: [string, ...number[]]; expectType(lastOf(trailingSpreadTuple1)); declare const trailingSpreadTuple2: [string, boolean, ...number[]]; expectType(lastOf(trailingSpreadTuple2)); // eslint-disable-next-line @typescript-eslint/array-type declare const trailingSpreadTuple3: ['foo', true, ...(1 | '2')[]]; expectType(lastOf(trailingSpreadTuple3));