mirror of
https://github.com/sindresorhus/type-fest.git
synced 2025-12-08 19:25:05 +00:00
33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
import {expectType} from 'tsd';
|
|
import type {ArrayTail} from '../index';
|
|
|
|
declare const getArrayTail: <T extends readonly unknown[]>(array: T) => ArrayTail<T>;
|
|
|
|
expectType<[]>(getArrayTail([]));
|
|
expectType<[]>(getArrayTail(['a']));
|
|
expectType<[]>(getArrayTail(['a', 'b', 'c']));
|
|
|
|
expectType<[]>(getArrayTail([] as const));
|
|
expectType<[]>(getArrayTail(['a'] as const));
|
|
expectType<['b', 'c']>(getArrayTail(['a', 'b', 'c'] as const));
|
|
|
|
// Optional elements tests
|
|
expectType<[undefined, 'c']>(getArrayTail(['a', undefined, 'c'] as const));
|
|
|
|
// Mixed optional/required
|
|
type MixedArray = [string, undefined?, number?];
|
|
expectType<[undefined?, number?]>(getArrayTail(['hello'] as MixedArray));
|
|
|
|
// Optional numbers
|
|
expectType<[undefined, 3]>(getArrayTail([1, undefined, 3] as const));
|
|
|
|
// Complex mixed case
|
|
type ComplexArray = [string, boolean, number?, string?];
|
|
expectType<[boolean, number?, string?]>(getArrayTail(['test', false] as ComplexArray));
|
|
|
|
// All optional elements
|
|
expectType<['b'?]>([] as ArrayTail<['a'?, 'b'?]>);
|
|
|
|
// Union of tuples
|
|
expectType<[] | ['b']>([] as ArrayTail<[] | ['a', 'b']>);
|