Skip to content

Commit

Permalink
feat: add FlattenArrayType utility type (#110)
Browse files Browse the repository at this point in the history
  • Loading branch information
halvaradop authored Sep 11, 2024
1 parent dfab5cc commit 85df552
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/array-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -259,3 +259,15 @@ type ZipImplementation<T, U, Build extends unknown[] = []> = T extends [infer It
* type Zip2 = Zip<[1, 2, 3], ["a", "b"]>;
*/
export type Zip<Array1 extends unknown[], Array2 extends unknown[]> = ZipImplementation<Array1, Array2>;

/**
* Returns the flatten type of an array.
*
* @example
* // Expected: number
* type Flatten1 = FlattenArrayType<number[][]>;
*
* // Expected: string
* type Flatten2 = FlattenArrayType<string[][][]>;
*/
export type FlattenArrayType<Array> = Array extends (infer Type)[] ? FlattenArrayType<Type> : Array;
10 changes: 10 additions & 0 deletions test/array-types.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,3 +136,13 @@ describe("Zip", () => {
>();
});
});

describe("FlattenArrayType", () => {
test("Flatten an array type", () => {
expectTypeOf<utilities.FlattenArrayType<number[]>>().toEqualTypeOf<number>();
expectTypeOf<utilities.FlattenArrayType<number[][]>>().toEqualTypeOf<number>();
expectTypeOf<utilities.FlattenArrayType<number[][][]>>().toEqualTypeOf<number>();
expectTypeOf<utilities.FlattenArrayType<string[][][][]>>().toEqualTypeOf<string>();
expectTypeOf<utilities.FlattenArrayType<unknown[][][][]>>().toEqualTypeOf<unknown>();
});
});

0 comments on commit 85df552

Please sign in to comment.