Skip to content

Commit

Permalink
Merge 6d22b59 into 4e275a8
Browse files Browse the repository at this point in the history
  • Loading branch information
nhardy committed Feb 2, 2021
2 parents 4e275a8 + 6d22b59 commit 6cab738
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 2 deletions.
2 changes: 1 addition & 1 deletion packages/kerosene-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
},
"dependencies": {
"@babel/runtime": "^7.10.4",
"@kablamo/kerosene": "^0.0.18",
"@kablamo/kerosene": "^0.0.19",
"@types/lodash": "^4.14.157",
"lodash": "^4.17.19"
},
Expand Down
2 changes: 1 addition & 1 deletion packages/kerosene/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@kablamo/kerosene",
"version": "0.0.18",
"version": "0.0.19",
"repository": "https://github.com/KablamoOSS/kerosene/tree/master/packages/kerosene",
"bugs": {
"url": "https://github.com/KablamoOSS/kerosene/issues"
Expand Down
16 changes: 16 additions & 0 deletions packages/kerosene/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,22 @@ From a union type `T`, allows properties which are not shared by all members to

Removes the `readonly` modifier from all properties in `T`.

### `Overloads<T>`

From an overloaded function `T`, infer each overload as a tuple element.

### `OverloadedParameters<T>`

For an overloaded function `T`, infer the union of parameters for all overloads.

### `OverloadedReturnType<T>`

For an overloaded function `T`, infer the union of return types for all overloads.

### `OverloadedReturnTypeWhen<T, P>`

For an overloaded function `T`, infer the return type for the specific overload when parameters match `P`.

### `PickBy<T, TValue>`

Creates a new type from `T` including only keys where the value is assignable to type `TValue`.
Expand Down
79 changes: 79 additions & 0 deletions packages/kerosene/src/types/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,85 @@ export type MergedUnion<T extends object> = __MergedUnion__<T, T>;
*/
export type Mutable<T> = { -readonly [P in keyof T]: T[P] };

/**
* From an overloaded function `T`, infer each overload as a tuple element
*/
export type Overloads<T> = T extends {
(...args: infer P1): infer R1;
(...args: infer P2): infer R2;
(...args: infer P3): infer R3;
(...args: infer P4): infer R4;
(...args: infer P5): infer R5;
(...args: infer P6): infer R6;
}
? [
(...args: P1) => R1,
(...args: P2) => R2,
(...args: P3) => R3,
(...args: P4) => R4,
(...args: P5) => R5,
(...args: P6) => R6,
]
: T extends {
(...args: infer P1): infer R1;
(...args: infer P2): infer R2;
(...args: infer P3): infer R3;
(...args: infer P4): infer R4;
(...args: infer P5): infer R5;
}
? [
(...args: P1) => R1,
(...args: P2) => R2,
(...args: P3) => R3,
(...args: P4) => R4,
(...args: P5) => R5,
]
: T extends {
(...args: infer P1): infer R1;
(...args: infer P2): infer R2;
(...args: infer P3): infer R3;
(...args: infer P4): infer R4;
}
? [
(...args: P1) => R1,
(...args: P2) => R2,
(...args: P3) => R3,
(...args: P4) => R4,
]
: T extends {
(...args: infer P1): infer R1;
(...args: infer P2): infer R2;
(...args: infer P3): infer R3;
}
? [(...args: P1) => R1, (...args: P2) => R2, (...args: P3) => R3]
: T extends {
(...args: infer P1): infer R1;
(...args: infer P2): infer R2;
}
? [(...args: P1) => R1, (...args: P2) => R2]
: T extends (...args: infer P1) => infer R1
? [(...args: P1) => R1]
: never;

/**
* For an overloaded function `T`, infer the union of parameters for all overloads
*/
export type OverloadedParameters<T> = Parameters<Overloads<T>[number]>;

/**
* For an overloaded function `T`, infer the union of return types for all overloads
*/
export type OverloadedReturnType<T> = ReturnType<Overloads<T>[number]>;

/**
* For an overloaded function `T`, infer the return type for the specific overload when parameters match `P`
*/
export type OverloadedReturnTypeWhen<T, P extends unknown[]> = T extends (
...args: P
) => infer R
? R
: never;

/**
* Creates a new type from `T` including only keys where the value is assignable to type `TValue`
*/
Expand Down

0 comments on commit 6cab738

Please sign in to comment.