File tree Expand file tree Collapse file tree 5 files changed +38
-10
lines changed Expand file tree Collapse file tree 5 files changed +38
-10
lines changed Original file line number Diff line number Diff line change 1- export type Compute < A > = A extends Promise < infer T >
2- ? Promise < Compute < T > >
3- : A extends ( ...args : infer P ) => infer R
4- ? ( ...args : Compute < P > ) => Compute < R >
5- : A extends Set < infer V >
6- ? Set < Compute < V > >
7- : A extends object
8- ? { [ key in keyof A ] : Compute < A [ key ] > }
9- : A ;
1+ import type { DoesExtend } from "./extends" ;
2+ import type { If } from "./if" ;
3+ import type { Key } from "./key" ;
4+
5+ export type Compute < A , Seen = never > = A extends
6+ | Function
7+ | Error
8+ | Date
9+ | { readonly [ Symbol . toStringTag ] : string }
10+ | RegExp
11+ | Generator
12+ ? A
13+ : If <
14+ DoesExtend < Seen , A > ,
15+ A ,
16+ A extends Array < unknown >
17+ ? A extends Array < Record < Key , unknown > >
18+ ? Array <
19+ {
20+ [ K in keyof A [ number ] ] : Compute < A [ number ] [ K ] , A | Seen > ;
21+ } & unknown
22+ >
23+ : A
24+ : A extends ReadonlyArray < unknown >
25+ ? A extends ReadonlyArray < Record < string | number | symbol , unknown > >
26+ ? ReadonlyArray <
27+ {
28+ [ K in keyof A [ number ] ] : Compute < A [ number ] [ K ] , A | Seen > ;
29+ } & unknown
30+ >
31+ : A
32+ : { [ K in keyof A ] : Compute < A [ K ] , A | Seen > } & unknown
33+ > ;
Original file line number Diff line number Diff line change 55 * @param B Type
66 * @return Boolean
77 */
8- export type DoesExtend < A , B > = A extends B ? true : false ;
8+ export type DoesExtend < A , B > = [ A ] extends [ B ] ? true : false ;
Original file line number Diff line number Diff line change 1+ export type If < B extends boolean , T , E = never > = B extends true ? T : E ;
Original file line number Diff line number Diff line change @@ -2,6 +2,8 @@ export type { And } from "./and";
22export type { Compute } from "./compute" ;
33export type { DoesExtend } from "./extends" ;
44export type { DeepGet } from "./get" ;
5+ export type { If } from "./if" ;
6+ export type { Key } from "./key" ;
57export type { Join } from "./join" ;
68export type { Narrow } from "./narrow" ;
79export type { Pop } from "./pop" ;
Original file line number Diff line number Diff line change 1+ export type Key = string | number | symbol ;
You can’t perform that action at this time.
0 commit comments