Advanced type-level utilities for arrays, matrices, and numeric operations (filtering, intersection, transposition, and min/max).
Using npm:
npm i -D ts-matrices
Using pnpm:
pnpm i -D ts-matrices
Requires TypeScript
v5.0
+
Filters elements from an array based on a given predicate type.
Example:
ArrayFilter<[0, 1, 2], Falsy>; // Results in [0]
ArrayFilter<[0, 1, 2, 3, 4], 0 | 2 | 4>; // Results in [0, 2, 4]
Extracts the maximum numeric value in a given array.
Example:
ArrayMax<[-54, 2, 0, 999, 69, 2]>; // Result: 999
ArrayMax<[-54, -2, -90, -72, -69, -202]>; // Result: -2
Extracts the minimum numeric value in a given array.
Example:
ArrayMin<[-54, 2, 0, 999, 69, 2]>; // Result: -54
ArrayMin<[-54, -2, -90, -72, -69, -202]>; // Result: -202
Transposes a matrix (2D array) by converting rows into columns and columns into rows.
Example:
type Matrix = [
[1, 2, 3],
[4, 5, 6]
];
Transpose<Matrix>; // Result: [[1, 4], [2, 5], [3, 6]]
Constructs a new array containing only unique elements from a given array type.
Example:
ArrayUnique<[1, 1, 2, 2, 3, 3]>; // Result: [1, 2, 3]
ArrayUnique<[1, 'a', 2, 'b', 2, 'a']>; // Result: [1, 'a', 2, 'b']
Checks if a given type is in an array type.
Example:
ArrayIncludes<[bigint, true, 2, 3, 5, 6, 'seven'], true>; // Result: true
ArrayIncludes<[0, 1, 2], 0>; // Result: true
Calculates the intersection of the types within an array of tuple types.
Example:
ArrayIntersection<[[1, 0, 1], [0, 1, -1], [0, 0, 1]]>; // Result: 0 | 1
ArrayIntersection<[[1, 0], [0, 1], [0, 0]]>; // Result: 0
Gets the minimum of two positive numbers.
Example:
MinInTwoPositiveNumbers<21, 0>; // Result: 0
MinInTwoPositiveNumbers<54, 10000000>; // Result: 54
Gets the maximum of two positive numbers.
Example:
MaxInTwoPositiveNumbers<21, 0>; // Result: 21
MaxInTwoPositiveNumbers<54, 10000000>; // Result: 10000000
Gets the minimum value from two numeric values, regardless of the sign.
Example:
MinInTwoNumbers<54, -78>; // Result: -78
MinInTwoNumbers<-87, 777>; // Result: -87
Gets the maximum value from two numeric values, regardless of the sign. Example:
MaxInTwoNumbers<54, -78>; // Result: 54
MaxInTwoNumbers<-87, 777>; // Result: 777
See releases.