TypeScript/tests/baselines/reference/narrowByEquality.types
Hossein 110b05987e
Fix GH-32798: Allow == null to narrow unknown to null | undefined (#45853)
* Fix GH-32798

* add assume true

* Address Gabby comments

* Address Gabby comments by adding Else branch
2021-09-22 10:54:59 -07:00

164 lines
2.5 KiB
Plaintext

=== tests/cases/compiler/narrowByEquality.ts ===
declare let x: number | string | boolean
>x : string | number | boolean
declare let n: number;
>n : number
declare let s: string;
>s : string
declare let b: boolean;
>b : boolean
declare let xUnknown: unknown;
>xUnknown : unknown
if (x == n) {
>x == n : boolean
>x : string | number | boolean
>n : number
x;
>x : string | number | boolean
}
if (x == s) {
>x == s : boolean
>x : string | number | boolean
>s : string
x;
>x : string | number | boolean
}
if (x == b) {
>x == b : boolean
>x : string | number | boolean
>b : boolean
x;
>x : string | number | boolean
}
if (x == 1) {
>x == 1 : boolean
>x : string | number | boolean
>1 : 1
x;
>x : 1
}
if (x == "") {
>x == "" : boolean
>x : string | number | boolean
>"" : ""
x;
>x : ""
}
if (x == "foo") {
>x == "foo" : boolean
>x : string | number | boolean
>"foo" : "foo"
x;
>x : "foo"
}
if (x == true) {
>x == true : boolean
>x : string | number | boolean
>true : true
x;
>x : true
}
if (x == false) {
>x == false : boolean
>x : string | number | boolean
>false : false
x;
>x : false
}
declare let xAndObj: number | string | boolean | object
>xAndObj : string | number | boolean | object
if (xAndObj == {}) {
>xAndObj == {} : boolean
>xAndObj : string | number | boolean | object
>{} : {}
xAndObj;
>xAndObj : object
}
if (x == xAndObj) {
>x == xAndObj : boolean
>x : string | number | boolean
>xAndObj : string | number | boolean | object
x;
>x : string | number | boolean
xAndObj;
>xAndObj : string | number | boolean
}
// Repro from #24991
function test(level: number | string):number {
>test : (level: number | string) => number
>level : string | number
if (level == +level) {
>level == +level : boolean
>level : string | number
>+level : number
>level : string | number
const q2: number = level; // error
>q2 : number
>level : string | number
return level;
>level : string | number
}
return 0;
>0 : 0
}
// From issue #32798
if (xUnknown == null) {
>xUnknown == null : boolean
>xUnknown : unknown
>null : null
xUnknown;
>xUnknown : null | undefined
} else {
xUnknown
>xUnknown : unknown
}
if (xUnknown != null) {
>xUnknown != null : boolean
>xUnknown : unknown
>null : null
xUnknown;
>xUnknown : unknown
} else {
xUnknown;
>xUnknown : null | undefined
}