Skip to content

Commit

Permalink
Add regression test
Browse files Browse the repository at this point in the history
  • Loading branch information
ahejlsberg committed Sep 15, 2022
1 parent 23a1dd4 commit 23784d7
Show file tree
Hide file tree
Showing 4 changed files with 118 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,26 @@ type MyObject<T> = T extends ZodObject<infer U>
? U extends ZodRawShape
? U
: never
: never;
: never;

// Repro from #50479

type Cell<Value extends BaseValue = any, BaseValue = unknown> = {
id: string
}

type Items<Type extends Cell = Cell> = {
type: Type
name: string
}

type InferIOItemToJSType<T extends Items> =
T extends { type: infer U }
? U extends Cell<infer V/**, infer _ or unknown, or any valid type **/>
? V
: never
: never


//// [inferTypeConstraintInstantiationCircularity.js]
"use strict";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,3 +204,51 @@ type MyObject<T> = T extends ZodObject<infer U>

: never
: never;

// Repro from #50479

type Cell<Value extends BaseValue = any, BaseValue = unknown> = {
>Cell : Symbol(Cell, Decl(inferTypeConstraintInstantiationCircularity.ts, 71, 10))
>Value : Symbol(Value, Decl(inferTypeConstraintInstantiationCircularity.ts, 75, 10))
>BaseValue : Symbol(BaseValue, Decl(inferTypeConstraintInstantiationCircularity.ts, 75, 40))
>BaseValue : Symbol(BaseValue, Decl(inferTypeConstraintInstantiationCircularity.ts, 75, 40))

id: string
>id : Symbol(id, Decl(inferTypeConstraintInstantiationCircularity.ts, 75, 65))
}

type Items<Type extends Cell = Cell> = {
>Items : Symbol(Items, Decl(inferTypeConstraintInstantiationCircularity.ts, 77, 1))
>Type : Symbol(Type, Decl(inferTypeConstraintInstantiationCircularity.ts, 79, 11))
>Cell : Symbol(Cell, Decl(inferTypeConstraintInstantiationCircularity.ts, 71, 10))
>Cell : Symbol(Cell, Decl(inferTypeConstraintInstantiationCircularity.ts, 71, 10))

type: Type
>type : Symbol(type, Decl(inferTypeConstraintInstantiationCircularity.ts, 79, 40))
>Type : Symbol(Type, Decl(inferTypeConstraintInstantiationCircularity.ts, 79, 11))

name: string
>name : Symbol(name, Decl(inferTypeConstraintInstantiationCircularity.ts, 80, 12))
}

type InferIOItemToJSType<T extends Items> =
>InferIOItemToJSType : Symbol(InferIOItemToJSType, Decl(inferTypeConstraintInstantiationCircularity.ts, 82, 1))
>T : Symbol(T, Decl(inferTypeConstraintInstantiationCircularity.ts, 84, 25))
>Items : Symbol(Items, Decl(inferTypeConstraintInstantiationCircularity.ts, 77, 1))

T extends { type: infer U }
>T : Symbol(T, Decl(inferTypeConstraintInstantiationCircularity.ts, 84, 25))
>type : Symbol(type, Decl(inferTypeConstraintInstantiationCircularity.ts, 85, 13))
>U : Symbol(U, Decl(inferTypeConstraintInstantiationCircularity.ts, 85, 25))

? U extends Cell<infer V/**, infer _ or unknown, or any valid type **/>
>U : Symbol(U, Decl(inferTypeConstraintInstantiationCircularity.ts, 85, 25))
>Cell : Symbol(Cell, Decl(inferTypeConstraintInstantiationCircularity.ts, 71, 10))
>V : Symbol(V, Decl(inferTypeConstraintInstantiationCircularity.ts, 86, 26))

? V
>V : Symbol(V, Decl(inferTypeConstraintInstantiationCircularity.ts, 86, 26))

: never
: never

Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,34 @@ type MyObject<T> = T extends ZodObject<infer U>
? U
: never
: never;

// Repro from #50479

type Cell<Value extends BaseValue = any, BaseValue = unknown> = {
>Cell : Cell<Value, BaseValue>

id: string
>id : string
}

type Items<Type extends Cell = Cell> = {
>Items : Items<Type>

type: Type
>type : Type

name: string
>name : string
}

type InferIOItemToJSType<T extends Items> =
>InferIOItemToJSType : InferIOItemToJSType<T>

T extends { type: infer U }
>type : U

? U extends Cell<infer V/**, infer _ or unknown, or any valid type **/>
? V
: never
: never

Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,22 @@ type MyObject<T> = T extends ZodObject<infer U>
? U extends ZodRawShape
? U
: never
: never;
: never;

// Repro from #50479

type Cell<Value extends BaseValue = any, BaseValue = unknown> = {
id: string
}

type Items<Type extends Cell = Cell> = {
type: Type
name: string
}

type InferIOItemToJSType<T extends Items> =
T extends { type: infer U }
? U extends Cell<infer V/**, infer _ or unknown, or any valid type **/>
? V
: never
: never

0 comments on commit 23784d7

Please sign in to comment.