diff --git a/source/array-slice.d.ts b/source/array-slice.d.ts index b339fd6b..179f392b 100644 --- a/source/array-slice.d.ts +++ b/source/array-slice.d.ts @@ -59,11 +59,13 @@ export type ArraySlice< Array_ extends readonly unknown[], Start extends number = never, End extends number = never, -> = And, IsEqual> extends true - ? Array_ - : number extends Array_['length'] - ? VariableLengthArraySliceHelper - : ArraySliceHelper extends true ? 0 : Start, IsEqual extends true ? Array_['length'] : End>; +> = Array_ extends unknown // To distributive type + ? And, IsEqual> extends true + ? Array_ + : number extends Array_['length'] + ? VariableLengthArraySliceHelper + : ArraySliceHelper extends true ? 0 : Start, IsEqual extends true ? Array_['length'] : End> + : never; // Never happens type VariableLengthArraySliceHelper< Array_ extends readonly unknown[], diff --git a/test-d/array-slice.ts b/test-d/array-slice.ts index 3e1dd6ee..684ef770 100644 --- a/test-d/array-slice.ts +++ b/test-d/array-slice.ts @@ -2,6 +2,8 @@ import {expectType} from 'tsd'; import type {ArraySlice} from '../index'; expectType>([0, 1, 2, 3]); +expectType>({} as [0, 1, 2] | [0, 1, 2, 3]); +expectType>({} as [0, 1] | [3, 2]); expectType>([0, 1, 2, 3]); expectType>([1, 2, 3]); expectType>([1]);