* Fix #10083 - allowSyntheticDefaultImports alters getExternalModuleMember (#10096) * Add a helper function `getOrUpdateProperty` to prevent unprotected access to Maps. * Limit type guards as assertions to incomplete types in loops * Accept new baselines * Fix linting error * [Release-2.0] Fix 9662: Visual Studio 2015 with TS2.0 gives incorrect @types path resolution errors (#9867) * Change the shape of the shim layer to support getAutomaticTypeDirectives * Change the key for looking up automatic type-directives * Update baselines from change look-up name of type-directives * Add @currentDirectory into the test * Update baselines * Fix linting error * Address PR: fix spelling mistake * Instead of return path of the type directive names just return type directive names * Remove unused reference files: these tests produce erros so they will not produce these files (#9233) * Don't allow properties inherited from Object to be automatically included in TSX attributes * Port PR #10016 to Master (#10100) * Treat namespaceExportDeclaration as declaration * Update baselines * wip - add tests * Add tests * Show "export namespace" for quick-info * Update baselines from merging
435 lines
8.4 KiB
Plaintext
435 lines
8.4 KiB
Plaintext
=== tests/cases/conformance/expressions/typeGuards/typeGuardTypeOfUndefined.ts ===
|
|
// undefined type guard adds no new type information
|
|
function test1(a: any) {
|
|
>test1 : (a: any) => void
|
|
>a : any
|
|
|
|
if (typeof a !== "undefined") {
|
|
>typeof a !== "undefined" : boolean
|
|
>typeof a : string
|
|
>a : any
|
|
>"undefined" : "undefined"
|
|
|
|
if (typeof a === "boolean") {
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : any
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : any
|
|
}
|
|
}
|
|
else {
|
|
a;
|
|
>a : undefined
|
|
}
|
|
}
|
|
|
|
function test2(a: any) {
|
|
>test2 : (a: any) => void
|
|
>a : any
|
|
|
|
if (typeof a === "undefined") {
|
|
>typeof a === "undefined" : boolean
|
|
>typeof a : string
|
|
>a : any
|
|
>"undefined" : "undefined"
|
|
|
|
if (typeof a === "boolean") {
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : undefined
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : never
|
|
}
|
|
else {
|
|
a;
|
|
>a : undefined
|
|
}
|
|
}
|
|
else {
|
|
a;
|
|
>a : any
|
|
}
|
|
}
|
|
|
|
function test3(a: any) {
|
|
>test3 : (a: any) => void
|
|
>a : any
|
|
|
|
if (typeof a === "undefined" || typeof a === "boolean") {
|
|
>typeof a === "undefined" || typeof a === "boolean" : boolean
|
|
>typeof a === "undefined" : boolean
|
|
>typeof a : string
|
|
>a : any
|
|
>"undefined" : "undefined"
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : any
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : any
|
|
}
|
|
}
|
|
|
|
function test4(a: any) {
|
|
>test4 : (a: any) => void
|
|
>a : any
|
|
|
|
if (typeof a !== "undefined" && typeof a === "boolean") {
|
|
>typeof a !== "undefined" && typeof a === "boolean" : boolean
|
|
>typeof a !== "undefined" : boolean
|
|
>typeof a : string
|
|
>a : any
|
|
>"undefined" : "undefined"
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : any
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : any
|
|
}
|
|
}
|
|
|
|
function test5(a: boolean | void) {
|
|
>test5 : (a: boolean | void) => void
|
|
>a : boolean | void
|
|
|
|
if (typeof a !== "undefined") {
|
|
>typeof a !== "undefined" : boolean
|
|
>typeof a : string
|
|
>a : boolean | void
|
|
>"undefined" : "undefined"
|
|
|
|
if (typeof a === "boolean") {
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : boolean
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : never
|
|
}
|
|
}
|
|
else {
|
|
a;
|
|
>a : boolean | void
|
|
}
|
|
}
|
|
|
|
function test6(a: boolean | void) {
|
|
>test6 : (a: boolean | void) => void
|
|
>a : boolean | void
|
|
|
|
if (typeof a === "undefined") {
|
|
>typeof a === "undefined" : boolean
|
|
>typeof a : string
|
|
>a : boolean | void
|
|
>"undefined" : "undefined"
|
|
|
|
if (typeof a === "boolean") {
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : boolean | void
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : void
|
|
}
|
|
}
|
|
else {
|
|
a;
|
|
>a : boolean
|
|
}
|
|
}
|
|
|
|
function test7(a: boolean | void) {
|
|
>test7 : (a: boolean | void) => void
|
|
>a : boolean | void
|
|
|
|
if (typeof a === "undefined" || typeof a === "boolean") {
|
|
>typeof a === "undefined" || typeof a === "boolean" : boolean
|
|
>typeof a === "undefined" : boolean
|
|
>typeof a : string
|
|
>a : boolean | void
|
|
>"undefined" : "undefined"
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : boolean
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean | void
|
|
}
|
|
else {
|
|
a;
|
|
>a : never
|
|
}
|
|
}
|
|
|
|
function test8(a: boolean | void) {
|
|
>test8 : (a: boolean | void) => void
|
|
>a : boolean | void
|
|
|
|
if (typeof a !== "undefined" && typeof a === "boolean") {
|
|
>typeof a !== "undefined" && typeof a === "boolean" : boolean
|
|
>typeof a !== "undefined" : boolean
|
|
>typeof a : string
|
|
>a : boolean | void
|
|
>"undefined" : "undefined"
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : boolean
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : boolean | void
|
|
}
|
|
}
|
|
|
|
function test9(a: boolean | number) {
|
|
>test9 : (a: number | boolean) => void
|
|
>a : number | boolean
|
|
|
|
if (typeof a !== "undefined") {
|
|
>typeof a !== "undefined" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"undefined" : "undefined"
|
|
|
|
if (typeof a === "boolean") {
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : number
|
|
}
|
|
}
|
|
else {
|
|
a;
|
|
>a : number | boolean
|
|
}
|
|
}
|
|
|
|
function test10(a: boolean | number) {
|
|
>test10 : (a: number | boolean) => void
|
|
>a : number | boolean
|
|
|
|
if (typeof a === "undefined") {
|
|
>typeof a === "undefined" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"undefined" : "undefined"
|
|
|
|
if (typeof a === "boolean") {
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : number
|
|
}
|
|
}
|
|
else {
|
|
a;
|
|
>a : number | boolean
|
|
}
|
|
}
|
|
|
|
function test11(a: boolean | number) {
|
|
>test11 : (a: number | boolean) => void
|
|
>a : number | boolean
|
|
|
|
if (typeof a === "undefined" || typeof a === "boolean") {
|
|
>typeof a === "undefined" || typeof a === "boolean" : boolean
|
|
>typeof a === "undefined" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"undefined" : "undefined"
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : number | boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : number
|
|
}
|
|
}
|
|
|
|
function test12(a: boolean | number) {
|
|
>test12 : (a: number | boolean) => void
|
|
>a : number | boolean
|
|
|
|
if (typeof a !== "undefined" && typeof a === "boolean") {
|
|
>typeof a !== "undefined" && typeof a === "boolean" : boolean
|
|
>typeof a !== "undefined" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"undefined" : "undefined"
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : number | boolean
|
|
}
|
|
}
|
|
|
|
function test13(a: boolean | number | void) {
|
|
>test13 : (a: number | boolean | void) => void
|
|
>a : number | boolean | void
|
|
|
|
if (typeof a !== "undefined") {
|
|
>typeof a !== "undefined" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean | void
|
|
>"undefined" : "undefined"
|
|
|
|
if (typeof a === "boolean") {
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : number
|
|
}
|
|
}
|
|
else {
|
|
a;
|
|
>a : number | boolean | void
|
|
}
|
|
}
|
|
|
|
function test14(a: boolean | number | void) {
|
|
>test14 : (a: number | boolean | void) => void
|
|
>a : number | boolean | void
|
|
|
|
if (typeof a === "undefined") {
|
|
>typeof a === "undefined" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean | void
|
|
>"undefined" : "undefined"
|
|
|
|
if (typeof a === "boolean") {
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean | void
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : number | void
|
|
}
|
|
}
|
|
else {
|
|
a;
|
|
>a : number | boolean
|
|
}
|
|
}
|
|
|
|
function test15(a: boolean | number | void) {
|
|
>test15 : (a: number | boolean | void) => void
|
|
>a : number | boolean | void
|
|
|
|
if (typeof a === "undefined" || typeof a === "boolean") {
|
|
>typeof a === "undefined" || typeof a === "boolean" : boolean
|
|
>typeof a === "undefined" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean | void
|
|
>"undefined" : "undefined"
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : number | boolean | void
|
|
}
|
|
else {
|
|
a;
|
|
>a : number
|
|
}
|
|
}
|
|
|
|
function test16(a: boolean | number | void) {
|
|
>test16 : (a: number | boolean | void) => void
|
|
>a : number | boolean | void
|
|
|
|
if (typeof a !== "undefined" && typeof a === "boolean") {
|
|
>typeof a !== "undefined" && typeof a === "boolean" : boolean
|
|
>typeof a !== "undefined" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean | void
|
|
>"undefined" : "undefined"
|
|
>typeof a === "boolean" : boolean
|
|
>typeof a : string
|
|
>a : number | boolean
|
|
>"boolean" : "boolean"
|
|
|
|
a;
|
|
>a : boolean
|
|
}
|
|
else {
|
|
a;
|
|
>a : number | boolean | void
|
|
}
|
|
}
|
|
|