Accept new baselines

This commit is contained in:
Anders Hejlsberg
2018-03-21 13:35:26 -07:00
parent eb3fd150a7
commit 275311edd3
3 changed files with 89 additions and 4 deletions

View File

@@ -1,22 +1,42 @@
//// [inferTypes2.ts]
// Repro from #22755
// Repros from #22755
export declare function foo<T>(obj: T): T extends () => infer P ? P : never;
export function bar<T>(obj: T) {
return foo(obj);
}
export type BadNested<T> = { x: T extends number ? T : string };
export declare function foo2<T>(obj: T): T extends { [K in keyof BadNested<infer P>]: BadNested<infer P>[K] } ? P : never;
export function bar2<T>(obj: T) {
return foo2(obj);
}
//// [inferTypes2.js]
"use strict";
// Repro from #22755
// Repros from #22755
exports.__esModule = true;
function bar(obj) {
return foo(obj);
}
exports.bar = bar;
function bar2(obj) {
return foo2(obj);
}
exports.bar2 = bar2;
//// [inferTypes2.d.ts]
export declare function foo<T>(obj: T): T extends () => infer P ? P : never;
export declare function bar<T>(obj: T): T extends () => infer P ? P : never;
export declare type BadNested<T> = {
x: T extends number ? T : string;
};
export declare function foo2<T>(obj: T): T extends {
[K in keyof BadNested<infer P>]: BadNested<infer P>[K];
} ? P : never;
export declare function bar2<T>(obj: T): T extends {
x: infer P extends number ? infer P : string;
} ? P : never;

View File

@@ -1,5 +1,5 @@
=== tests/cases/conformance/types/conditional/inferTypes2.ts ===
// Repro from #22755
// Repros from #22755
export declare function foo<T>(obj: T): T extends () => infer P ? P : never;
>foo : Symbol(foo, Decl(inferTypes2.ts, 0, 0))
@@ -21,3 +21,35 @@ export function bar<T>(obj: T) {
>obj : Symbol(obj, Decl(inferTypes2.ts, 3, 23))
}
export type BadNested<T> = { x: T extends number ? T : string };
>BadNested : Symbol(BadNested, Decl(inferTypes2.ts, 5, 1))
>T : Symbol(T, Decl(inferTypes2.ts, 7, 22))
>x : Symbol(x, Decl(inferTypes2.ts, 7, 28))
>T : Symbol(T, Decl(inferTypes2.ts, 7, 22))
>T : Symbol(T, Decl(inferTypes2.ts, 7, 22))
export declare function foo2<T>(obj: T): T extends { [K in keyof BadNested<infer P>]: BadNested<infer P>[K] } ? P : never;
>foo2 : Symbol(foo2, Decl(inferTypes2.ts, 7, 64))
>T : Symbol(T, Decl(inferTypes2.ts, 9, 29))
>obj : Symbol(obj, Decl(inferTypes2.ts, 9, 32))
>T : Symbol(T, Decl(inferTypes2.ts, 9, 29))
>T : Symbol(T, Decl(inferTypes2.ts, 9, 29))
>K : Symbol(K, Decl(inferTypes2.ts, 9, 54))
>BadNested : Symbol(BadNested, Decl(inferTypes2.ts, 5, 1))
>P : Symbol(P, Decl(inferTypes2.ts, 9, 80), Decl(inferTypes2.ts, 9, 101))
>BadNested : Symbol(BadNested, Decl(inferTypes2.ts, 5, 1))
>P : Symbol(P, Decl(inferTypes2.ts, 9, 80), Decl(inferTypes2.ts, 9, 101))
>K : Symbol(K, Decl(inferTypes2.ts, 9, 54))
>P : Symbol(P, Decl(inferTypes2.ts, 9, 80), Decl(inferTypes2.ts, 9, 101))
export function bar2<T>(obj: T) {
>bar2 : Symbol(bar2, Decl(inferTypes2.ts, 9, 122))
>T : Symbol(T, Decl(inferTypes2.ts, 10, 21))
>obj : Symbol(obj, Decl(inferTypes2.ts, 10, 24))
>T : Symbol(T, Decl(inferTypes2.ts, 10, 21))
return foo2(obj);
>foo2 : Symbol(foo2, Decl(inferTypes2.ts, 7, 64))
>obj : Symbol(obj, Decl(inferTypes2.ts, 10, 24))
}

View File

@@ -1,5 +1,5 @@
=== tests/cases/conformance/types/conditional/inferTypes2.ts ===
// Repro from #22755
// Repros from #22755
export declare function foo<T>(obj: T): T extends () => infer P ? P : never;
>foo : <T>(obj: T) => T extends () => infer P ? P : never
@@ -22,3 +22,36 @@ export function bar<T>(obj: T) {
>obj : T
}
export type BadNested<T> = { x: T extends number ? T : string };
>BadNested : BadNested<T>
>T : T
>x : T extends number ? T : string
>T : T
>T : T
export declare function foo2<T>(obj: T): T extends { [K in keyof BadNested<infer P>]: BadNested<infer P>[K] } ? P : never;
>foo2 : <T>(obj: T) => T extends { x: infer P extends number ? infer P : string; } ? P : never
>T : T
>obj : T
>T : T
>T : T
>K : K
>BadNested : BadNested<T>
>P : P
>BadNested : BadNested<T>
>P : P
>K : K
>P : P
export function bar2<T>(obj: T) {
>bar2 : <T>(obj: T) => T extends { x: infer P extends number ? infer P : string; } ? P : never
>T : T
>obj : T
>T : T
return foo2(obj);
>foo2(obj) : T extends { x: infer P extends number ? infer P : string; } ? P : never
>foo2 : <T>(obj: T) => T extends { x: infer P extends number ? infer P : string; } ? P : never
>obj : T
}