diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index d39613e515194..ee5600601aba2 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -513,7 +513,7 @@ interface Boolean { interface BooleanConstructor { new(value?: any): Boolean; - (value?: any): boolean; + (value?: T): value is Exclude; readonly prototype: Boolean; } diff --git a/tests/baselines/reference/typeGuardBoolean.js b/tests/baselines/reference/typeGuardBoolean.js new file mode 100644 index 0000000000000..1bfe41983d83b --- /dev/null +++ b/tests/baselines/reference/typeGuardBoolean.js @@ -0,0 +1,30 @@ +//// [typeGuardBoolean.ts] +function test(strOrNull: string | null, strOrUndefined: string | undefined) { + var str: string = "original"; + var nil: null; + if (!Boolean(strOrNull)) { + nil = strOrNull; + } + else { + str = strOrNull; + } + if (Boolean(strOrUndefined)) { + str = strOrUndefined; + } +} + + +//// [typeGuardBoolean.js] +function test(strOrNull, strOrUndefined) { + var str = "original"; + var nil; + if (!Boolean(strOrNull)) { + nil = strOrNull; + } + else { + str = strOrNull; + } + if (Boolean(strOrUndefined)) { + str = strOrUndefined; + } +} diff --git a/tests/baselines/reference/typeGuardBoolean.symbols b/tests/baselines/reference/typeGuardBoolean.symbols new file mode 100644 index 0000000000000..6a08dcbda8a06 --- /dev/null +++ b/tests/baselines/reference/typeGuardBoolean.symbols @@ -0,0 +1,35 @@ +=== tests/cases/conformance/expressions/typeGuards/typeGuardBoolean.ts === +function test(strOrNull: string | null, strOrUndefined: string | undefined) { +>test : Symbol(test, Decl(typeGuardBoolean.ts, 0, 0)) +>strOrNull : Symbol(strOrNull, Decl(typeGuardBoolean.ts, 0, 14)) +>strOrUndefined : Symbol(strOrUndefined, Decl(typeGuardBoolean.ts, 0, 39)) + + var str: string = "original"; +>str : Symbol(str, Decl(typeGuardBoolean.ts, 1, 5)) + + var nil: null; +>nil : Symbol(nil, Decl(typeGuardBoolean.ts, 2, 5)) + + if (!Boolean(strOrNull)) { +>Boolean : Symbol(Boolean, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>strOrNull : Symbol(strOrNull, Decl(typeGuardBoolean.ts, 0, 14)) + + nil = strOrNull; +>nil : Symbol(nil, Decl(typeGuardBoolean.ts, 2, 5)) +>strOrNull : Symbol(strOrNull, Decl(typeGuardBoolean.ts, 0, 14)) + } + else { + str = strOrNull; +>str : Symbol(str, Decl(typeGuardBoolean.ts, 1, 5)) +>strOrNull : Symbol(strOrNull, Decl(typeGuardBoolean.ts, 0, 14)) + } + if (Boolean(strOrUndefined)) { +>Boolean : Symbol(Boolean, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) +>strOrUndefined : Symbol(strOrUndefined, Decl(typeGuardBoolean.ts, 0, 39)) + + str = strOrUndefined; +>str : Symbol(str, Decl(typeGuardBoolean.ts, 1, 5)) +>strOrUndefined : Symbol(strOrUndefined, Decl(typeGuardBoolean.ts, 0, 39)) + } +} + diff --git a/tests/baselines/reference/typeGuardBoolean.types b/tests/baselines/reference/typeGuardBoolean.types new file mode 100644 index 0000000000000..db3d6f39cd841 --- /dev/null +++ b/tests/baselines/reference/typeGuardBoolean.types @@ -0,0 +1,44 @@ +=== tests/cases/conformance/expressions/typeGuards/typeGuardBoolean.ts === +function test(strOrNull: string | null, strOrUndefined: string | undefined) { +>test : (strOrNull: string | null, strOrUndefined: string | undefined) => void +>strOrNull : string | null +>null : null +>strOrUndefined : string | undefined + + var str: string = "original"; +>str : string +>"original" : "original" + + var nil: null; +>nil : null +>null : null + + if (!Boolean(strOrNull)) { +>!Boolean(strOrNull) : boolean +>Boolean(strOrNull) : boolean +>Boolean : BooleanConstructor +>strOrNull : string | null + + nil = strOrNull; +>nil = strOrNull : null +>nil : null +>strOrNull : null + } + else { + str = strOrNull; +>str = strOrNull : string +>str : string +>strOrNull : string + } + if (Boolean(strOrUndefined)) { +>Boolean(strOrUndefined) : boolean +>Boolean : BooleanConstructor +>strOrUndefined : string | undefined + + str = strOrUndefined; +>str = strOrUndefined : string +>str : string +>strOrUndefined : string + } +} + diff --git a/tests/cases/conformance/expressions/typeGuards/typeGuardBoolean.ts b/tests/cases/conformance/expressions/typeGuards/typeGuardBoolean.ts new file mode 100644 index 0000000000000..3f2dde227ba8c --- /dev/null +++ b/tests/cases/conformance/expressions/typeGuards/typeGuardBoolean.ts @@ -0,0 +1,14 @@ +// @strictNullChecks: true +function test(strOrNull: string | null, strOrUndefined: string | undefined) { + var str: string = "original"; + var nil: null; + if (!Boolean(strOrNull)) { + nil = strOrNull; + } + else { + str = strOrNull; + } + if (Boolean(strOrUndefined)) { + str = strOrUndefined; + } +}