mirror of
https://github.com/sindresorhus/type-fest.git
synced 2025-12-08 19:25:05 +00:00
ArraySlice: Fix support for union input (#986)
This commit is contained in:
parent
c85bc12a4e
commit
0efbae3ac3
12
source/array-slice.d.ts
vendored
12
source/array-slice.d.ts
vendored
@ -59,11 +59,13 @@ export type ArraySlice<
|
||||
Array_ extends readonly unknown[],
|
||||
Start extends number = never,
|
||||
End extends number = never,
|
||||
> = And<IsEqual<Start, never>, IsEqual<End, never>> extends true
|
||||
? Array_
|
||||
: number extends Array_['length']
|
||||
? VariableLengthArraySliceHelper<Array_, Start, End>
|
||||
: ArraySliceHelper<Array_, IsEqual<Start, never> extends true ? 0 : Start, IsEqual<End, never> extends true ? Array_['length'] : End>;
|
||||
> = Array_ extends unknown // To distributive type
|
||||
? And<IsEqual<Start, never>, IsEqual<End, never>> extends true
|
||||
? Array_
|
||||
: number extends Array_['length']
|
||||
? VariableLengthArraySliceHelper<Array_, Start, End>
|
||||
: ArraySliceHelper<Array_, IsEqual<Start, never> extends true ? 0 : Start, IsEqual<End, never> extends true ? Array_['length'] : End>
|
||||
: never; // Never happens
|
||||
|
||||
type VariableLengthArraySliceHelper<
|
||||
Array_ extends readonly unknown[],
|
||||
|
||||
@ -2,6 +2,8 @@ import {expectType} from 'tsd';
|
||||
import type {ArraySlice} from '../index';
|
||||
|
||||
expectType<ArraySlice<[0, 1, 2, 3]>>([0, 1, 2, 3]);
|
||||
expectType<ArraySlice<[0, 1, 2] | [0, 1, 2, 3], 0>>({} as [0, 1, 2] | [0, 1, 2, 3]);
|
||||
expectType<ArraySlice<[0, 1, 2] | [3, 2, 1, 0], 0, 2>>({} as [0, 1] | [3, 2]);
|
||||
expectType<ArraySlice<[0, 1, 2, 3]>>([0, 1, 2, 3]);
|
||||
expectType<ArraySlice<[0, 1, 2, 3], 1>>([1, 2, 3]);
|
||||
expectType<ArraySlice<[0, 1, 2, 3], 1, 2>>([1]);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user