425 lines
20 KiB
Plaintext
425 lines
20 KiB
Plaintext
=== tests/cases/compiler/recursiveConditionalCrash3.ts ===
|
|
// #43529
|
|
|
|
export {}
|
|
/**
|
|
*
|
|
* Some helper Types and Interfaces..
|
|
*
|
|
*/
|
|
|
|
export type CanBeExpanded<T extends object = object, D = string> = {
|
|
>CanBeExpanded : Symbol(CanBeExpanded, Decl(recursiveConditionalCrash3.ts, 2, 9))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 9, 26))
|
|
>D : Symbol(D, Decl(recursiveConditionalCrash3.ts, 9, 52))
|
|
|
|
value: T
|
|
>value : Symbol(value, Decl(recursiveConditionalCrash3.ts, 9, 68))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 9, 26))
|
|
|
|
default: D
|
|
>default : Symbol(default, Decl(recursiveConditionalCrash3.ts, 10, 12))
|
|
>D : Symbol(D, Decl(recursiveConditionalCrash3.ts, 9, 52))
|
|
}
|
|
|
|
interface Base {
|
|
>Base : Symbol(Base, Decl(recursiveConditionalCrash3.ts, 12, 1))
|
|
|
|
}
|
|
|
|
interface User extends Base {
|
|
>User : Symbol(User, Decl(recursiveConditionalCrash3.ts, 16, 1))
|
|
>Base : Symbol(Base, Decl(recursiveConditionalCrash3.ts, 12, 1))
|
|
|
|
id: string,
|
|
>id : Symbol(User.id, Decl(recursiveConditionalCrash3.ts, 18, 29))
|
|
|
|
role: CanBeExpanded<Role>,
|
|
>role : Symbol(User.role, Decl(recursiveConditionalCrash3.ts, 19, 15))
|
|
>CanBeExpanded : Symbol(CanBeExpanded, Decl(recursiveConditionalCrash3.ts, 2, 9))
|
|
>Role : Symbol(Role, Decl(recursiveConditionalCrash3.ts, 22, 1))
|
|
|
|
note: string,
|
|
>note : Symbol(User.note, Decl(recursiveConditionalCrash3.ts, 20, 30))
|
|
}
|
|
|
|
interface Role extends Base {
|
|
>Role : Symbol(Role, Decl(recursiveConditionalCrash3.ts, 22, 1))
|
|
>Base : Symbol(Base, Decl(recursiveConditionalCrash3.ts, 12, 1))
|
|
|
|
id: string,
|
|
>id : Symbol(Role.id, Decl(recursiveConditionalCrash3.ts, 24, 29))
|
|
|
|
user: CanBeExpanded<User>,
|
|
>user : Symbol(Role.user, Decl(recursiveConditionalCrash3.ts, 25, 15))
|
|
>CanBeExpanded : Symbol(CanBeExpanded, Decl(recursiveConditionalCrash3.ts, 2, 9))
|
|
>User : Symbol(User, Decl(recursiveConditionalCrash3.ts, 16, 1))
|
|
|
|
x: string
|
|
>x : Symbol(Role.x, Decl(recursiveConditionalCrash3.ts, 26, 30))
|
|
}
|
|
|
|
// This interface will be expanded in circular way.
|
|
interface X extends Base {
|
|
>X : Symbol(X, Decl(recursiveConditionalCrash3.ts, 28, 1))
|
|
>Base : Symbol(Base, Decl(recursiveConditionalCrash3.ts, 12, 1))
|
|
|
|
id: string,
|
|
>id : Symbol(X.id, Decl(recursiveConditionalCrash3.ts, 31, 26))
|
|
|
|
name: string,
|
|
>name : Symbol(X.name, Decl(recursiveConditionalCrash3.ts, 32, 15))
|
|
|
|
user: CanBeExpanded<User>,
|
|
>user : Symbol(X.user, Decl(recursiveConditionalCrash3.ts, 33, 17))
|
|
>CanBeExpanded : Symbol(CanBeExpanded, Decl(recursiveConditionalCrash3.ts, 2, 9))
|
|
>User : Symbol(User, Decl(recursiveConditionalCrash3.ts, 16, 1))
|
|
|
|
role: CanBeExpanded<Role>
|
|
>role : Symbol(X.role, Decl(recursiveConditionalCrash3.ts, 34, 30))
|
|
>CanBeExpanded : Symbol(CanBeExpanded, Decl(recursiveConditionalCrash3.ts, 2, 9))
|
|
>Role : Symbol(Role, Decl(recursiveConditionalCrash3.ts, 22, 1))
|
|
|
|
roles: CanBeExpanded<Role[]>
|
|
>roles : Symbol(X.roles, Decl(recursiveConditionalCrash3.ts, 35, 29))
|
|
>CanBeExpanded : Symbol(CanBeExpanded, Decl(recursiveConditionalCrash3.ts, 2, 9))
|
|
>Role : Symbol(Role, Decl(recursiveConditionalCrash3.ts, 22, 1))
|
|
}
|
|
|
|
type Join<K, P> = K extends string | number ?
|
|
>Join : Symbol(Join, Decl(recursiveConditionalCrash3.ts, 37, 1))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 39, 10))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 39, 12))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 39, 10))
|
|
|
|
P extends string | number ?
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 39, 12))
|
|
|
|
`${K}${"" extends P ? "" : "."}${P}`
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 39, 10))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 39, 12))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 39, 12))
|
|
|
|
: never : never;
|
|
|
|
type PrefixWith<P, S, C = '.'> = P extends '' ? `${string & S}` : `${string & P}${string & C}${string & S}`
|
|
>PrefixWith : Symbol(PrefixWith, Decl(recursiveConditionalCrash3.ts, 42, 24))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 44, 16))
|
|
>S : Symbol(S, Decl(recursiveConditionalCrash3.ts, 44, 18))
|
|
>C : Symbol(C, Decl(recursiveConditionalCrash3.ts, 44, 21))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 44, 16))
|
|
>S : Symbol(S, Decl(recursiveConditionalCrash3.ts, 44, 18))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 44, 16))
|
|
>C : Symbol(C, Decl(recursiveConditionalCrash3.ts, 44, 21))
|
|
>S : Symbol(S, Decl(recursiveConditionalCrash3.ts, 44, 18))
|
|
|
|
type SplitWithAllPossibleCombinations<S extends string, D extends string> =
|
|
>SplitWithAllPossibleCombinations : Symbol(SplitWithAllPossibleCombinations, Decl(recursiveConditionalCrash3.ts, 44, 107))
|
|
>S : Symbol(S, Decl(recursiveConditionalCrash3.ts, 46, 38))
|
|
>D : Symbol(D, Decl(recursiveConditionalCrash3.ts, 46, 55))
|
|
|
|
string extends S ? string :
|
|
>S : Symbol(S, Decl(recursiveConditionalCrash3.ts, 46, 38))
|
|
|
|
S extends '' ? '' :
|
|
>S : Symbol(S, Decl(recursiveConditionalCrash3.ts, 46, 38))
|
|
|
|
S extends `${infer T}${D}${infer U}` ?
|
|
>S : Symbol(S, Decl(recursiveConditionalCrash3.ts, 46, 38))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 49, 30))
|
|
>D : Symbol(D, Decl(recursiveConditionalCrash3.ts, 46, 55))
|
|
>U : Symbol(U, Decl(recursiveConditionalCrash3.ts, 49, 44))
|
|
|
|
T | Join<T, SplitWithAllPossibleCombinations<U, D>>
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 49, 30))
|
|
>Join : Symbol(Join, Decl(recursiveConditionalCrash3.ts, 37, 1))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 49, 30))
|
|
>SplitWithAllPossibleCombinations : Symbol(SplitWithAllPossibleCombinations, Decl(recursiveConditionalCrash3.ts, 44, 107))
|
|
>U : Symbol(U, Decl(recursiveConditionalCrash3.ts, 49, 44))
|
|
>D : Symbol(D, Decl(recursiveConditionalCrash3.ts, 46, 55))
|
|
|
|
: S;
|
|
>S : Symbol(S, Decl(recursiveConditionalCrash3.ts, 46, 38))
|
|
|
|
|
|
/**
|
|
* This function will return all possibile keys that can be expanded on T, only to the N deep level
|
|
*/
|
|
type KeysCanBeExpanded_<T, N extends number, Depth extends number[]> = N extends Depth['length'] ? never :
|
|
>KeysCanBeExpanded_ : Symbol(KeysCanBeExpanded_, Decl(recursiveConditionalCrash3.ts, 51, 20))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 57, 24))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 57, 26))
|
|
>Depth : Symbol(Depth, Decl(recursiveConditionalCrash3.ts, 57, 44))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 57, 26))
|
|
>Depth : Symbol(Depth, Decl(recursiveConditionalCrash3.ts, 57, 44))
|
|
|
|
T extends CanBeExpanded ?
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 57, 24))
|
|
>CanBeExpanded : Symbol(CanBeExpanded, Decl(recursiveConditionalCrash3.ts, 2, 9))
|
|
|
|
KeysCanBeExpanded_<T['value'], N, Depth> :
|
|
>KeysCanBeExpanded_ : Symbol(KeysCanBeExpanded_, Decl(recursiveConditionalCrash3.ts, 51, 20))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 57, 24))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 57, 26))
|
|
>Depth : Symbol(Depth, Decl(recursiveConditionalCrash3.ts, 57, 44))
|
|
|
|
T extends Array<infer U> ? KeysCanBeExpanded_<U, N, Depth> :
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 57, 24))
|
|
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
|
>U : Symbol(U, Decl(recursiveConditionalCrash3.ts, 60, 29))
|
|
>KeysCanBeExpanded_ : Symbol(KeysCanBeExpanded_, Decl(recursiveConditionalCrash3.ts, 51, 20))
|
|
>U : Symbol(U, Decl(recursiveConditionalCrash3.ts, 60, 29))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 57, 26))
|
|
>Depth : Symbol(Depth, Decl(recursiveConditionalCrash3.ts, 57, 44))
|
|
|
|
T extends object ?
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 57, 24))
|
|
{
|
|
[K in keyof T ] :
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 64, 21))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 57, 24))
|
|
|
|
T[K] extends object ?
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 57, 24))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 64, 21))
|
|
|
|
K extends string | number
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 64, 21))
|
|
|
|
? `${K}` | Join<`${K}`, KeysCanBeExpanded_<T[K], N, [1, ...Depth]>>
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 64, 21))
|
|
>Join : Symbol(Join, Decl(recursiveConditionalCrash3.ts, 37, 1))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 64, 21))
|
|
>KeysCanBeExpanded_ : Symbol(KeysCanBeExpanded_, Decl(recursiveConditionalCrash3.ts, 51, 20))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 57, 24))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 64, 21))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 57, 26))
|
|
>Depth : Symbol(Depth, Decl(recursiveConditionalCrash3.ts, 57, 44))
|
|
|
|
: never
|
|
: never
|
|
|
|
}[keyof T]
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 57, 24))
|
|
|
|
:
|
|
never
|
|
|
|
export type KeysCanBeExpanded<T, N extends number = 4> = KeysCanBeExpanded_<T, N, []>
|
|
>KeysCanBeExpanded : Symbol(KeysCanBeExpanded, Decl(recursiveConditionalCrash3.ts, 73, 21))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 75, 30))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 75, 32))
|
|
>KeysCanBeExpanded_ : Symbol(KeysCanBeExpanded_, Decl(recursiveConditionalCrash3.ts, 51, 20))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 75, 30))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 75, 32))
|
|
|
|
/**
|
|
* Expand keys on `O` based on `Keys` parameter.
|
|
*/
|
|
type Expand__<O, Keys, P extends string, N extends number , Depth extends unknown[] > =
|
|
>Expand__ : Symbol(Expand__, Decl(recursiveConditionalCrash3.ts, 75, 85))
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
>Keys : Symbol(Keys, Decl(recursiveConditionalCrash3.ts, 80, 16))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 80, 22))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 80, 40))
|
|
>Depth : Symbol(Depth, Decl(recursiveConditionalCrash3.ts, 80, 59))
|
|
|
|
N extends Depth['length'] ?
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 80, 40))
|
|
>Depth : Symbol(Depth, Decl(recursiveConditionalCrash3.ts, 80, 59))
|
|
|
|
O extends CanBeExpanded ?
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
>CanBeExpanded : Symbol(CanBeExpanded, Decl(recursiveConditionalCrash3.ts, 2, 9))
|
|
|
|
O['default'] :
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
|
|
O :
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
|
|
O extends CanBeExpanded ?
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
>CanBeExpanded : Symbol(CanBeExpanded, Decl(recursiveConditionalCrash3.ts, 2, 9))
|
|
|
|
Expand__<O[P extends Keys ? 'value' : 'default'], Keys, P, N, Depth> :
|
|
>Expand__ : Symbol(Expand__, Decl(recursiveConditionalCrash3.ts, 75, 85))
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 80, 22))
|
|
>Keys : Symbol(Keys, Decl(recursiveConditionalCrash3.ts, 80, 16))
|
|
>Keys : Symbol(Keys, Decl(recursiveConditionalCrash3.ts, 80, 16))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 80, 22))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 80, 40))
|
|
>Depth : Symbol(Depth, Decl(recursiveConditionalCrash3.ts, 80, 59))
|
|
|
|
O extends Array<infer U> ?
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
|
>U : Symbol(U, Decl(recursiveConditionalCrash3.ts, 87, 33))
|
|
|
|
Expand__<U, Keys, P, N, Depth>[]
|
|
>Expand__ : Symbol(Expand__, Decl(recursiveConditionalCrash3.ts, 75, 85))
|
|
>U : Symbol(U, Decl(recursiveConditionalCrash3.ts, 87, 33))
|
|
>Keys : Symbol(Keys, Decl(recursiveConditionalCrash3.ts, 80, 16))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 80, 22))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 80, 40))
|
|
>Depth : Symbol(Depth, Decl(recursiveConditionalCrash3.ts, 80, 59))
|
|
|
|
: O extends object ?
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
{
|
|
[K in keyof O]-?: Expand__<O[K], Keys, PrefixWith<P, K>, N, [1, ...Depth]>
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 91, 21))
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
>Expand__ : Symbol(Expand__, Decl(recursiveConditionalCrash3.ts, 75, 85))
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 91, 21))
|
|
>Keys : Symbol(Keys, Decl(recursiveConditionalCrash3.ts, 80, 16))
|
|
>PrefixWith : Symbol(PrefixWith, Decl(recursiveConditionalCrash3.ts, 42, 24))
|
|
>P : Symbol(P, Decl(recursiveConditionalCrash3.ts, 80, 22))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 91, 21))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 80, 40))
|
|
>Depth : Symbol(Depth, Decl(recursiveConditionalCrash3.ts, 80, 59))
|
|
}
|
|
: O
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 80, 14))
|
|
|
|
|
|
|
|
type SplitAC<K> = SplitWithAllPossibleCombinations<K extends string ? K : '', '.'> extends infer Ko ? Ko : ''
|
|
>SplitAC : Symbol(SplitAC, Decl(recursiveConditionalCrash3.ts, 93, 19))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 97, 13))
|
|
>SplitWithAllPossibleCombinations : Symbol(SplitWithAllPossibleCombinations, Decl(recursiveConditionalCrash3.ts, 44, 107))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 97, 13))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 97, 13))
|
|
>Ko : Symbol(Ko, Decl(recursiveConditionalCrash3.ts, 97, 96))
|
|
>Ko : Symbol(Ko, Decl(recursiveConditionalCrash3.ts, 97, 96))
|
|
|
|
type Expand_<T, K, N extends number = 4> = Expand__<T, SplitAC<K>, '', N, []>
|
|
>Expand_ : Symbol(Expand_, Decl(recursiveConditionalCrash3.ts, 97, 109))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 98, 13))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 98, 15))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 98, 18))
|
|
>Expand__ : Symbol(Expand__, Decl(recursiveConditionalCrash3.ts, 75, 85))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 98, 13))
|
|
>SplitAC : Symbol(SplitAC, Decl(recursiveConditionalCrash3.ts, 93, 19))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 98, 15))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 98, 18))
|
|
|
|
type AllKeys<T, N extends number = 4> = KeysCanBeExpanded<T, N> extends infer R ? R : never
|
|
>AllKeys : Symbol(AllKeys, Decl(recursiveConditionalCrash3.ts, 98, 77))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 99, 13))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 99, 15))
|
|
>KeysCanBeExpanded : Symbol(KeysCanBeExpanded, Decl(recursiveConditionalCrash3.ts, 73, 21))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 99, 13))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 99, 15))
|
|
>R : Symbol(R, Decl(recursiveConditionalCrash3.ts, 99, 77))
|
|
>R : Symbol(R, Decl(recursiveConditionalCrash3.ts, 99, 77))
|
|
|
|
|
|
|
|
/**
|
|
* If I open the popup, (pointing with the mouse on the Expand), the compiler shows the type Expand, expanded as expected.
|
|
*
|
|
* It's fast and it doesn't use additional memory
|
|
*
|
|
*/
|
|
export type Expand<T extends object, K extends AllKeys<T, N> = never, N extends number = 4> = Expand_<T, K, N>
|
|
>Expand : Symbol(Expand, Decl(recursiveConditionalCrash3.ts, 99, 91))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 109, 19))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 109, 36))
|
|
>AllKeys : Symbol(AllKeys, Decl(recursiveConditionalCrash3.ts, 98, 77))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 109, 19))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 109, 69))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 109, 69))
|
|
>Expand_ : Symbol(Expand_, Decl(recursiveConditionalCrash3.ts, 97, 109))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 109, 19))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 109, 36))
|
|
>N : Symbol(N, Decl(recursiveConditionalCrash3.ts, 109, 69))
|
|
|
|
/**
|
|
* These two functions work as charm, also they are superfast and as expected they don't use additional Memory
|
|
*/
|
|
let y1: Expand<X>
|
|
>y1 : Symbol(y1, Decl(recursiveConditionalCrash3.ts, 114, 3))
|
|
>Expand : Symbol(Expand, Decl(recursiveConditionalCrash3.ts, 99, 91))
|
|
>X : Symbol(X, Decl(recursiveConditionalCrash3.ts, 28, 1))
|
|
|
|
let y2: Expand<X, 'user.role.user.role'>
|
|
>y2 : Symbol(y2, Decl(recursiveConditionalCrash3.ts, 115, 3))
|
|
>Expand : Symbol(Expand, Decl(recursiveConditionalCrash3.ts, 99, 91))
|
|
>X : Symbol(X, Decl(recursiveConditionalCrash3.ts, 28, 1))
|
|
|
|
|
|
/**
|
|
*
|
|
* ... nevertheless when I need to use the Expand in other Types, as the following examples, the popup show "loading..." and without show any information and
|
|
* the Memory Heap grows to 1.2gb (in my case) every time... You can see it opening the Chrome DevTools and check the memory Tab.
|
|
*
|
|
* *******
|
|
* I think this is causing "FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory"
|
|
* on my project during the `yarn start`.
|
|
* *******
|
|
*
|
|
*/
|
|
|
|
type UseQueryOptions<T extends Base, K extends AllKeys<T, 4> > = Expand<T, K>
|
|
>UseQueryOptions : Symbol(UseQueryOptions, Decl(recursiveConditionalCrash3.ts, 115, 40))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 130, 21))
|
|
>Base : Symbol(Base, Decl(recursiveConditionalCrash3.ts, 12, 1))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 130, 36))
|
|
>AllKeys : Symbol(AllKeys, Decl(recursiveConditionalCrash3.ts, 98, 77))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 130, 21))
|
|
>Expand : Symbol(Expand, Decl(recursiveConditionalCrash3.ts, 99, 91))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 130, 21))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 130, 36))
|
|
|
|
type UseQueryOptions2<T , K > = Expand_<T, K>
|
|
>UseQueryOptions2 : Symbol(UseQueryOptions2, Decl(recursiveConditionalCrash3.ts, 130, 77))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 132, 22))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 132, 25))
|
|
>Expand_ : Symbol(Expand_, Decl(recursiveConditionalCrash3.ts, 97, 109))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 132, 22))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 132, 25))
|
|
|
|
type UseQueryOptions3<T , K > = Expand_<T, K> extends infer O ? O : never
|
|
>UseQueryOptions3 : Symbol(UseQueryOptions3, Decl(recursiveConditionalCrash3.ts, 132, 46))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 133, 22))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 133, 25))
|
|
>Expand_ : Symbol(Expand_, Decl(recursiveConditionalCrash3.ts, 97, 109))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 133, 22))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 133, 25))
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 133, 60))
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 133, 60))
|
|
|
|
type ExpandResult<T,K> = Expand_<T, K> extends infer O ? O : never
|
|
>ExpandResult : Symbol(ExpandResult, Decl(recursiveConditionalCrash3.ts, 133, 74))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 135, 18))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 135, 20))
|
|
>Expand_ : Symbol(Expand_, Decl(recursiveConditionalCrash3.ts, 97, 109))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 135, 18))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 135, 20))
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 135, 52))
|
|
>O : Symbol(O, Decl(recursiveConditionalCrash3.ts, 135, 52))
|
|
|
|
type UseQueryOptions4<T , K > = ExpandResult<T,K>
|
|
>UseQueryOptions4 : Symbol(UseQueryOptions4, Decl(recursiveConditionalCrash3.ts, 135, 66))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 136, 22))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 136, 25))
|
|
>ExpandResult : Symbol(ExpandResult, Decl(recursiveConditionalCrash3.ts, 133, 74))
|
|
>T : Symbol(T, Decl(recursiveConditionalCrash3.ts, 136, 22))
|
|
>K : Symbol(K, Decl(recursiveConditionalCrash3.ts, 136, 25))
|
|
|
|
|
|
/**
|
|
* but as you can see here, the expansion of Interface X it's still working.
|
|
*
|
|
* If a memory is still high, it may need some seconds to show popup.
|
|
*
|
|
*/
|
|
let t: UseQueryOptions<X, 'role.user.role'>
|
|
>t : Symbol(t, Decl(recursiveConditionalCrash3.ts, 145, 3))
|
|
>UseQueryOptions : Symbol(UseQueryOptions, Decl(recursiveConditionalCrash3.ts, 115, 40))
|
|
>X : Symbol(X, Decl(recursiveConditionalCrash3.ts, 28, 1))
|
|
|