Skip to content

Commit 0efbae3

Browse files
authored
ArraySlice: Fix support for union input (#986)
1 parent c85bc12 commit 0efbae3

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

source/array-slice.d.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,13 @@ export type ArraySlice<
5959
Array_ extends readonly unknown[],
6060
Start extends number = never,
6161
End extends number = never,
62-
> = And<IsEqual<Start, never>, IsEqual<End, never>> extends true
63-
? Array_
64-
: number extends Array_['length']
65-
? VariableLengthArraySliceHelper<Array_, Start, End>
66-
: ArraySliceHelper<Array_, IsEqual<Start, never> extends true ? 0 : Start, IsEqual<End, never> extends true ? Array_['length'] : End>;
62+
> = Array_ extends unknown // To distributive type
63+
? And<IsEqual<Start, never>, IsEqual<End, never>> extends true
64+
? Array_
65+
: number extends Array_['length']
66+
? VariableLengthArraySliceHelper<Array_, Start, End>
67+
: ArraySliceHelper<Array_, IsEqual<Start, never> extends true ? 0 : Start, IsEqual<End, never> extends true ? Array_['length'] : End>
68+
: never; // Never happens
6769

6870
type VariableLengthArraySliceHelper<
6971
Array_ extends readonly unknown[],

test-d/array-slice.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import {expectType} from 'tsd';
22
import type {ArraySlice} from '../index';
33

44
expectType<ArraySlice<[0, 1, 2, 3]>>([0, 1, 2, 3]);
5+
expectType<ArraySlice<[0, 1, 2] | [0, 1, 2, 3], 0>>({} as [0, 1, 2] | [0, 1, 2, 3]);
6+
expectType<ArraySlice<[0, 1, 2] | [3, 2, 1, 0], 0, 2>>({} as [0, 1] | [3, 2]);
57
expectType<ArraySlice<[0, 1, 2, 3]>>([0, 1, 2, 3]);
68
expectType<ArraySlice<[0, 1, 2, 3], 1>>([1, 2, 3]);
79
expectType<ArraySlice<[0, 1, 2, 3], 1, 2>>([1]);

0 commit comments

Comments
 (0)