Merge pull request #5942 from Microsoft/fixUnionToUnionTypeInference

Fix union/union or intersection/intersection type inference
This commit is contained in:
Anders Hejlsberg
2015-12-05 09:28:18 -08:00
5 changed files with 98 additions and 31 deletions

View File

@@ -0,0 +1,14 @@
//// [recursiveUnionTypeInference.ts]
interface Foo<T> {
x: T;
}
function bar<T>(x: Foo<T> | string): T {
return bar(x);
}
//// [recursiveUnionTypeInference.js]
function bar(x) {
return bar(x);
}

View File

@@ -0,0 +1,23 @@
=== tests/cases/compiler/recursiveUnionTypeInference.ts ===
interface Foo<T> {
>Foo : Symbol(Foo, Decl(recursiveUnionTypeInference.ts, 0, 0))
>T : Symbol(T, Decl(recursiveUnionTypeInference.ts, 0, 14))
x: T;
>x : Symbol(x, Decl(recursiveUnionTypeInference.ts, 0, 18))
>T : Symbol(T, Decl(recursiveUnionTypeInference.ts, 0, 14))
}
function bar<T>(x: Foo<T> | string): T {
>bar : Symbol(bar, Decl(recursiveUnionTypeInference.ts, 2, 1))
>T : Symbol(T, Decl(recursiveUnionTypeInference.ts, 4, 13))
>x : Symbol(x, Decl(recursiveUnionTypeInference.ts, 4, 16))
>Foo : Symbol(Foo, Decl(recursiveUnionTypeInference.ts, 0, 0))
>T : Symbol(T, Decl(recursiveUnionTypeInference.ts, 4, 13))
>T : Symbol(T, Decl(recursiveUnionTypeInference.ts, 4, 13))
return bar(x);
>bar : Symbol(bar, Decl(recursiveUnionTypeInference.ts, 2, 1))
>x : Symbol(x, Decl(recursiveUnionTypeInference.ts, 4, 16))
}

View File

@@ -0,0 +1,24 @@
=== tests/cases/compiler/recursiveUnionTypeInference.ts ===
interface Foo<T> {
>Foo : Foo<T>
>T : T
x: T;
>x : T
>T : T
}
function bar<T>(x: Foo<T> | string): T {
>bar : <T>(x: Foo<T> | string) => T
>T : T
>x : Foo<T> | string
>Foo : Foo<T>
>T : T
>T : T
return bar(x);
>bar(x) : T
>bar : <T>(x: Foo<T> | string) => T
>x : Foo<T> | string
}

View File

@@ -0,0 +1,7 @@
interface Foo<T> {
x: T;
}
function bar<T>(x: Foo<T> | string): T {
return bar(x);
}