Accept new baselines

This commit is contained in:
Anders Hejlsberg
2019-01-24 10:12:43 -08:00
parent 500c4729e9
commit 936ee9b921
4 changed files with 238 additions and 56 deletions

View File

@@ -129,6 +129,34 @@ tests/cases/compiler/discriminantPropertyCheck.ts(65,9): error TS2532: Object is
u.b && u.a && f(u.a, u.b);
// Repro from #29012
type Additive = '+' | '-';
type Multiplicative = '*' | '/';
interface AdditiveObj {
key: Additive
}
interface MultiplicativeObj {
key: Multiplicative
}
type Obj = AdditiveObj | MultiplicativeObj
export function foo(obj: Obj) {
switch (obj.key) {
case '+': {
onlyPlus(obj.key);
return;
}
}
}
function onlyPlus(arg: '+') {
return arg;
}
// Repro from #29496
declare function never(value: never): never;

View File

@@ -121,6 +121,34 @@ u.a && u.b && f(u.a, u.b);
u.b && u.a && f(u.a, u.b);
// Repro from #29012
type Additive = '+' | '-';
type Multiplicative = '*' | '/';
interface AdditiveObj {
key: Additive
}
interface MultiplicativeObj {
key: Multiplicative
}
type Obj = AdditiveObj | MultiplicativeObj
export function foo(obj: Obj) {
switch (obj.key) {
case '+': {
onlyPlus(obj.key);
return;
}
}
}
function onlyPlus(arg: '+') {
return arg;
}
// Repro from #29496
declare function never(value: never): never;
@@ -149,6 +177,8 @@ function func3(value: Partial<UnionOfBar>) {
//// [discriminantPropertyCheck.js]
"use strict";
exports.__esModule = true;
function goo1(x) {
if (x.kind === "A" && x.foo !== undefined) {
x.foo.length;
@@ -214,6 +244,18 @@ var f = function (_a, _b) { };
var u = {};
u.a && u.b && f(u.a, u.b);
u.b && u.a && f(u.a, u.b);
function foo(obj) {
switch (obj.key) {
case '+': {
onlyPlus(obj.key);
return;
}
}
}
exports.foo = foo;
function onlyPlus(arg) {
return arg;
}
function func3(value) {
if (value.type !== undefined) {
switch (value.type) {

View File

@@ -377,74 +377,133 @@ u.b && u.a && f(u.a, u.b);
>u : Symbol(u, Decl(discriminantPropertyCheck.ts, 116, 5))
>b : Symbol(b, Decl(discriminantPropertyCheck.ts, 105, 13), Decl(discriminantPropertyCheck.ts, 110, 12))
// Repro from #29496
// Repro from #29012
declare function never(value: never): never;
>never : Symbol(never, Decl(discriminantPropertyCheck.ts, 120, 26))
>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 124, 23))
type Additive = '+' | '-';
>Additive : Symbol(Additive, Decl(discriminantPropertyCheck.ts, 120, 26))
const enum BarEnum {
>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44))
type Multiplicative = '*' | '/';
>Multiplicative : Symbol(Multiplicative, Decl(discriminantPropertyCheck.ts, 124, 26))
bar1 = 1,
>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20))
interface AdditiveObj {
>AdditiveObj : Symbol(AdditiveObj, Decl(discriminantPropertyCheck.ts, 125, 32))
bar2 = 2,
>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13))
key: Additive
>key : Symbol(AdditiveObj.key, Decl(discriminantPropertyCheck.ts, 127, 23))
>Additive : Symbol(Additive, Decl(discriminantPropertyCheck.ts, 120, 26))
}
type UnionOfBar = TypeBar1 | TypeBar2;
>UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 129, 1))
>TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 131, 38))
>TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 132, 39))
interface MultiplicativeObj {
>MultiplicativeObj : Symbol(MultiplicativeObj, Decl(discriminantPropertyCheck.ts, 129, 1))
type TypeBar1 = { type: BarEnum.bar1 };
>TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 131, 38))
>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17))
>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44))
>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20))
key: Multiplicative
>key : Symbol(MultiplicativeObj.key, Decl(discriminantPropertyCheck.ts, 131, 29))
>Multiplicative : Symbol(Multiplicative, Decl(discriminantPropertyCheck.ts, 124, 26))
}
type TypeBar2 = { type: BarEnum.bar2 };
>TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 132, 39))
>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 133, 17))
>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44))
>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13))
type Obj = AdditiveObj | MultiplicativeObj
>Obj : Symbol(Obj, Decl(discriminantPropertyCheck.ts, 133, 1))
>AdditiveObj : Symbol(AdditiveObj, Decl(discriminantPropertyCheck.ts, 125, 32))
>MultiplicativeObj : Symbol(MultiplicativeObj, Decl(discriminantPropertyCheck.ts, 129, 1))
function func3(value: Partial<UnionOfBar>) {
>func3 : Symbol(func3, Decl(discriminantPropertyCheck.ts, 133, 39))
>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15))
>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
>UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 129, 1))
export function foo(obj: Obj) {
>foo : Symbol(foo, Decl(discriminantPropertyCheck.ts, 135, 42))
>obj : Symbol(obj, Decl(discriminantPropertyCheck.ts, 137, 20))
>Obj : Symbol(Obj, Decl(discriminantPropertyCheck.ts, 133, 1))
if (value.type !== undefined) {
>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17))
>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15))
>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17))
>undefined : Symbol(undefined)
switch (obj.key) {
>obj.key : Symbol(key, Decl(discriminantPropertyCheck.ts, 127, 23), Decl(discriminantPropertyCheck.ts, 131, 29))
>obj : Symbol(obj, Decl(discriminantPropertyCheck.ts, 137, 20))
>key : Symbol(key, Decl(discriminantPropertyCheck.ts, 127, 23), Decl(discriminantPropertyCheck.ts, 131, 29))
switch (value.type) {
>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17))
>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15))
>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17))
case '+': {
onlyPlus(obj.key);
>onlyPlus : Symbol(onlyPlus, Decl(discriminantPropertyCheck.ts, 144, 1))
>obj.key : Symbol(AdditiveObj.key, Decl(discriminantPropertyCheck.ts, 127, 23))
>obj : Symbol(obj, Decl(discriminantPropertyCheck.ts, 137, 20))
>key : Symbol(AdditiveObj.key, Decl(discriminantPropertyCheck.ts, 127, 23))
case BarEnum.bar1:
>BarEnum.bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20))
>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44))
>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 126, 20))
break;
case BarEnum.bar2:
>BarEnum.bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13))
>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 124, 44))
>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 127, 13))
break;
default:
never(value.type);
>never : Symbol(never, Decl(discriminantPropertyCheck.ts, 120, 26))
>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17))
>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 135, 15))
>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 132, 17), Decl(discriminantPropertyCheck.ts, 133, 17))
return;
}
}
}
function onlyPlus(arg: '+') {
>onlyPlus : Symbol(onlyPlus, Decl(discriminantPropertyCheck.ts, 144, 1))
>arg : Symbol(arg, Decl(discriminantPropertyCheck.ts, 146, 18))
return arg;
>arg : Symbol(arg, Decl(discriminantPropertyCheck.ts, 146, 18))
}
// Repro from #29496
declare function never(value: never): never;
>never : Symbol(never, Decl(discriminantPropertyCheck.ts, 148, 1))
>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 152, 23))
const enum BarEnum {
>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44))
bar1 = 1,
>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20))
bar2 = 2,
>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13))
}
type UnionOfBar = TypeBar1 | TypeBar2;
>UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 157, 1))
>TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 159, 38))
>TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 160, 39))
type TypeBar1 = { type: BarEnum.bar1 };
>TypeBar1 : Symbol(TypeBar1, Decl(discriminantPropertyCheck.ts, 159, 38))
>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17))
>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44))
>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20))
type TypeBar2 = { type: BarEnum.bar2 };
>TypeBar2 : Symbol(TypeBar2, Decl(discriminantPropertyCheck.ts, 160, 39))
>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 161, 17))
>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44))
>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13))
function func3(value: Partial<UnionOfBar>) {
>func3 : Symbol(func3, Decl(discriminantPropertyCheck.ts, 161, 39))
>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15))
>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
>UnionOfBar : Symbol(UnionOfBar, Decl(discriminantPropertyCheck.ts, 157, 1))
if (value.type !== undefined) {
>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15))
>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
>undefined : Symbol(undefined)
switch (value.type) {
>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15))
>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
case BarEnum.bar1:
>BarEnum.bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20))
>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44))
>bar1 : Symbol(BarEnum.bar1, Decl(discriminantPropertyCheck.ts, 154, 20))
break;
case BarEnum.bar2:
>BarEnum.bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13))
>BarEnum : Symbol(BarEnum, Decl(discriminantPropertyCheck.ts, 152, 44))
>bar2 : Symbol(BarEnum.bar2, Decl(discriminantPropertyCheck.ts, 155, 13))
break;
default:
never(value.type);
>never : Symbol(never, Decl(discriminantPropertyCheck.ts, 148, 1))
>value.type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
>value : Symbol(value, Decl(discriminantPropertyCheck.ts, 163, 15))
>type : Symbol(type, Decl(discriminantPropertyCheck.ts, 160, 17), Decl(discriminantPropertyCheck.ts, 161, 17))
}
}
}

View File

@@ -378,6 +378,59 @@ u.b && u.a && f(u.a, u.b);
>u : U
>b : string
// Repro from #29012
type Additive = '+' | '-';
>Additive : Additive
type Multiplicative = '*' | '/';
>Multiplicative : Multiplicative
interface AdditiveObj {
key: Additive
>key : Additive
}
interface MultiplicativeObj {
key: Multiplicative
>key : Multiplicative
}
type Obj = AdditiveObj | MultiplicativeObj
>Obj : Obj
export function foo(obj: Obj) {
>foo : (obj: Obj) => void
>obj : Obj
switch (obj.key) {
>obj.key : "+" | "-" | "*" | "/"
>obj : Obj
>key : "+" | "-" | "*" | "/"
case '+': {
>'+' : "+"
onlyPlus(obj.key);
>onlyPlus(obj.key) : "+"
>onlyPlus : (arg: "+") => "+"
>obj.key : "+"
>obj : AdditiveObj
>key : "+"
return;
}
}
}
function onlyPlus(arg: '+') {
>onlyPlus : (arg: "+") => "+"
>arg : "+"
return arg;
>arg : "+"
}
// Repro from #29496
declare function never(value: never): never;