TypeScript/tests/baselines/reference/controlFlowTypeofObject.types
Anders Hejlsberg 5186ee3d1b
Track non-null unknown types in control flow analysis (#45575)
* Track non-null unknown types in CFA

* Add tests
2021-09-09 09:20:44 -07:00

180 lines
3.4 KiB
Plaintext

=== tests/cases/conformance/controlFlow/controlFlowTypeofObject.ts ===
declare function obj(x: object): void;
>obj : (x: object) => void
>x : object
function f1(x: unknown) {
>f1 : (x: unknown) => void
>x : unknown
if (!x) {
>!x : boolean
>x : unknown
return;
}
if (typeof x === 'object') {
>typeof x === 'object' : boolean
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>x : unknown
>'object' : "object"
obj(x);
>obj(x) : void
>obj : (x: object) => void
>x : object
}
}
function f2(x: unknown) {
>f2 : (x: unknown) => void
>x : unknown
if (x === null) {
>x === null : boolean
>x : unknown
>null : null
return;
}
if (typeof x === 'object') {
>typeof x === 'object' : boolean
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>x : unknown
>'object' : "object"
obj(x);
>obj(x) : void
>obj : (x: object) => void
>x : object
}
}
function f3(x: unknown) {
>f3 : (x: unknown) => void
>x : unknown
if (x == null) {
>x == null : boolean
>x : unknown
>null : null
return;
}
if (typeof x === 'object') {
>typeof x === 'object' : boolean
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>x : unknown
>'object' : "object"
obj(x);
>obj(x) : void
>obj : (x: object) => void
>x : object
}
}
function f4(x: unknown) {
>f4 : (x: unknown) => void
>x : unknown
if (x == undefined) {
>x == undefined : boolean
>x : unknown
>undefined : undefined
return;
}
if (typeof x === 'object') {
>typeof x === 'object' : boolean
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>x : unknown
>'object' : "object"
obj(x);
>obj(x) : void
>obj : (x: object) => void
>x : object
}
}
function f5(x: unknown) {
>f5 : (x: unknown) => void
>x : unknown
if (!!true) {
>!!true : true
>!true : false
>true : true
if (!x) {
>!x : boolean
>x : unknown
return;
}
}
else {
if (x === null) {
>x === null : boolean
>x : unknown
>null : null
return;
}
}
if (typeof x === 'object') {
>typeof x === 'object' : boolean
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>x : unknown
>'object' : "object"
obj(x);
>obj(x) : void
>obj : (x: object) => void
>x : object
}
}
function f6(x: unknown) {
>f6 : (x: unknown) => void
>x : unknown
if (x === null) {
>x === null : boolean
>x : unknown
>null : null
x;
>x : null
}
else {
x;
>x : unknown
if (typeof x === 'object') {
>typeof x === 'object' : boolean
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>x : unknown
>'object' : "object"
obj(x);
>obj(x) : void
>obj : (x: object) => void
>x : object
}
}
if (typeof x === 'object') {
>typeof x === 'object' : boolean
>typeof x : "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"
>x : unknown
>'object' : "object"
obj(x); // Error
>obj(x) : void
>obj : (x: object) => void
>x : object | null
}
}