From 3173b41d8a337cd0fb83342efe1484deb3492c6e Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 10 Apr 2020 13:19:00 -0700 Subject: [PATCH 1/2] Error on missing BigInt in ES2020 too. Previously it was only on ESNext, but bigint ships in ES 2020. There are no tests for this; passing `false` doesn't cause any tests to fail at least. --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 711cb06bdead9..181701fd3658a 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -10349,7 +10349,7 @@ namespace ts { t.flags & TypeFlags.Intersection ? getApparentTypeOfIntersectionType(t) : t.flags & TypeFlags.StringLike ? globalStringType : t.flags & TypeFlags.NumberLike ? globalNumberType : - t.flags & TypeFlags.BigIntLike ? getGlobalBigIntType(/*reportErrors*/ languageVersion >= ScriptTarget.ESNext) : + t.flags & TypeFlags.BigIntLike ? getGlobalBigIntType(/*reportErrors*/ languageVersion >= ScriptTarget.ES2020) : t.flags & TypeFlags.BooleanLike ? globalBooleanType : t.flags & TypeFlags.ESSymbolLike ? getGlobalESSymbolType(/*reportErrors*/ languageVersion >= ScriptTarget.ES2015) : t.flags & TypeFlags.NonPrimitive ? emptyObjectType : From 018dca53e15da54ee295a5700e20d622f1fdfd2b Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com> Date: Fri, 10 Apr 2020 14:55:37 -0700 Subject: [PATCH 2/2] add tests --- .../baselines/reference/bigintMissingES2019.js | 13 +++++++++++++ .../reference/bigintMissingES2019.symbols | 17 +++++++++++++++++ .../reference/bigintMissingES2019.types | 16 ++++++++++++++++ .../reference/bigintMissingES2020.errors.txt | 12 ++++++++++++ .../baselines/reference/bigintMissingES2020.js | 13 +++++++++++++ .../reference/bigintMissingES2020.symbols | 17 +++++++++++++++++ .../reference/bigintMissingES2020.types | 16 ++++++++++++++++ .../reference/bigintMissingESNext.errors.txt | 12 ++++++++++++ .../baselines/reference/bigintMissingESNext.js | 13 +++++++++++++ .../reference/bigintMissingESNext.symbols | 17 +++++++++++++++++ .../reference/bigintMissingESNext.types | 16 ++++++++++++++++ .../conformance/es2020/bigintMissingES2019.ts | 8 ++++++++ .../conformance/es2020/bigintMissingES2020.ts | 8 ++++++++ .../conformance/es2020/bigintMissingESNext.ts | 8 ++++++++ 14 files changed, 186 insertions(+) create mode 100644 tests/baselines/reference/bigintMissingES2019.js create mode 100644 tests/baselines/reference/bigintMissingES2019.symbols create mode 100644 tests/baselines/reference/bigintMissingES2019.types create mode 100644 tests/baselines/reference/bigintMissingES2020.errors.txt create mode 100644 tests/baselines/reference/bigintMissingES2020.js create mode 100644 tests/baselines/reference/bigintMissingES2020.symbols create mode 100644 tests/baselines/reference/bigintMissingES2020.types create mode 100644 tests/baselines/reference/bigintMissingESNext.errors.txt create mode 100644 tests/baselines/reference/bigintMissingESNext.js create mode 100644 tests/baselines/reference/bigintMissingESNext.symbols create mode 100644 tests/baselines/reference/bigintMissingESNext.types create mode 100644 tests/cases/conformance/es2020/bigintMissingES2019.ts create mode 100644 tests/cases/conformance/es2020/bigintMissingES2020.ts create mode 100644 tests/cases/conformance/es2020/bigintMissingESNext.ts diff --git a/tests/baselines/reference/bigintMissingES2019.js b/tests/baselines/reference/bigintMissingES2019.js new file mode 100644 index 0000000000000..85c82e8da6768 --- /dev/null +++ b/tests/baselines/reference/bigintMissingES2019.js @@ -0,0 +1,13 @@ +//// [bigintMissingES2019.ts] +declare function test(): void; + +test<{t?: string}, object>(); +test<{t?: string}, bigint>(); + +// no error when bigint is used even when ES2020 lib is not present + + +//// [bigintMissingES2019.js] +test(); +test(); +// no error when bigint is used even when ES2020 lib is not present diff --git a/tests/baselines/reference/bigintMissingES2019.symbols b/tests/baselines/reference/bigintMissingES2019.symbols new file mode 100644 index 0000000000000..d0f2102df04ef --- /dev/null +++ b/tests/baselines/reference/bigintMissingES2019.symbols @@ -0,0 +1,17 @@ +=== tests/cases/conformance/es2020/bigintMissingES2019.ts === +declare function test(): void; +>test : Symbol(test, Decl(bigintMissingES2019.ts, 0, 0)) +>A : Symbol(A, Decl(bigintMissingES2019.ts, 0, 22)) +>B : Symbol(B, Decl(bigintMissingES2019.ts, 0, 24)) +>A : Symbol(A, Decl(bigintMissingES2019.ts, 0, 22)) + +test<{t?: string}, object>(); +>test : Symbol(test, Decl(bigintMissingES2019.ts, 0, 0)) +>t : Symbol(t, Decl(bigintMissingES2019.ts, 2, 6)) + +test<{t?: string}, bigint>(); +>test : Symbol(test, Decl(bigintMissingES2019.ts, 0, 0)) +>t : Symbol(t, Decl(bigintMissingES2019.ts, 3, 6)) + +// no error when bigint is used even when ES2020 lib is not present + diff --git a/tests/baselines/reference/bigintMissingES2019.types b/tests/baselines/reference/bigintMissingES2019.types new file mode 100644 index 0000000000000..a757652768d7a --- /dev/null +++ b/tests/baselines/reference/bigintMissingES2019.types @@ -0,0 +1,16 @@ +=== tests/cases/conformance/es2020/bigintMissingES2019.ts === +declare function test(): void; +>test : () => void + +test<{t?: string}, object>(); +>test<{t?: string}, object>() : void +>test : () => void +>t : string + +test<{t?: string}, bigint>(); +>test<{t?: string}, bigint>() : void +>test : () => void +>t : string + +// no error when bigint is used even when ES2020 lib is not present + diff --git a/tests/baselines/reference/bigintMissingES2020.errors.txt b/tests/baselines/reference/bigintMissingES2020.errors.txt new file mode 100644 index 0000000000000..768ee7214c8ac --- /dev/null +++ b/tests/baselines/reference/bigintMissingES2020.errors.txt @@ -0,0 +1,12 @@ +error TS2318: Cannot find global type 'BigInt'. + + +!!! error TS2318: Cannot find global type 'BigInt'. +==== tests/cases/conformance/es2020/bigintMissingES2020.ts (0 errors) ==== + declare function test(): void; + + test<{t?: string}, object>(); + test<{t?: string}, bigint>(); + + // should have global error when bigint is used but ES2020 lib is not present + \ No newline at end of file diff --git a/tests/baselines/reference/bigintMissingES2020.js b/tests/baselines/reference/bigintMissingES2020.js new file mode 100644 index 0000000000000..83e2cde68e062 --- /dev/null +++ b/tests/baselines/reference/bigintMissingES2020.js @@ -0,0 +1,13 @@ +//// [bigintMissingES2020.ts] +declare function test(): void; + +test<{t?: string}, object>(); +test<{t?: string}, bigint>(); + +// should have global error when bigint is used but ES2020 lib is not present + + +//// [bigintMissingES2020.js] +test(); +test(); +// should have global error when bigint is used but ES2020 lib is not present diff --git a/tests/baselines/reference/bigintMissingES2020.symbols b/tests/baselines/reference/bigintMissingES2020.symbols new file mode 100644 index 0000000000000..0757f97759e70 --- /dev/null +++ b/tests/baselines/reference/bigintMissingES2020.symbols @@ -0,0 +1,17 @@ +=== tests/cases/conformance/es2020/bigintMissingES2020.ts === +declare function test(): void; +>test : Symbol(test, Decl(bigintMissingES2020.ts, 0, 0)) +>A : Symbol(A, Decl(bigintMissingES2020.ts, 0, 22)) +>B : Symbol(B, Decl(bigintMissingES2020.ts, 0, 24)) +>A : Symbol(A, Decl(bigintMissingES2020.ts, 0, 22)) + +test<{t?: string}, object>(); +>test : Symbol(test, Decl(bigintMissingES2020.ts, 0, 0)) +>t : Symbol(t, Decl(bigintMissingES2020.ts, 2, 6)) + +test<{t?: string}, bigint>(); +>test : Symbol(test, Decl(bigintMissingES2020.ts, 0, 0)) +>t : Symbol(t, Decl(bigintMissingES2020.ts, 3, 6)) + +// should have global error when bigint is used but ES2020 lib is not present + diff --git a/tests/baselines/reference/bigintMissingES2020.types b/tests/baselines/reference/bigintMissingES2020.types new file mode 100644 index 0000000000000..36b26c3a43d01 --- /dev/null +++ b/tests/baselines/reference/bigintMissingES2020.types @@ -0,0 +1,16 @@ +=== tests/cases/conformance/es2020/bigintMissingES2020.ts === +declare function test(): void; +>test : () => void + +test<{t?: string}, object>(); +>test<{t?: string}, object>() : void +>test : () => void +>t : string + +test<{t?: string}, bigint>(); +>test<{t?: string}, bigint>() : void +>test : () => void +>t : string + +// should have global error when bigint is used but ES2020 lib is not present + diff --git a/tests/baselines/reference/bigintMissingESNext.errors.txt b/tests/baselines/reference/bigintMissingESNext.errors.txt new file mode 100644 index 0000000000000..381223a9451ce --- /dev/null +++ b/tests/baselines/reference/bigintMissingESNext.errors.txt @@ -0,0 +1,12 @@ +error TS2318: Cannot find global type 'BigInt'. + + +!!! error TS2318: Cannot find global type 'BigInt'. +==== tests/cases/conformance/es2020/bigintMissingESNext.ts (0 errors) ==== + declare function test(): void; + + test<{t?: string}, object>(); + test<{t?: string}, bigint>(); + + // should have global error when bigint is used but ES2020 lib is not present + \ No newline at end of file diff --git a/tests/baselines/reference/bigintMissingESNext.js b/tests/baselines/reference/bigintMissingESNext.js new file mode 100644 index 0000000000000..5029ca536c28a --- /dev/null +++ b/tests/baselines/reference/bigintMissingESNext.js @@ -0,0 +1,13 @@ +//// [bigintMissingESNext.ts] +declare function test(): void; + +test<{t?: string}, object>(); +test<{t?: string}, bigint>(); + +// should have global error when bigint is used but ES2020 lib is not present + + +//// [bigintMissingESNext.js] +test(); +test(); +// should have global error when bigint is used but ES2020 lib is not present diff --git a/tests/baselines/reference/bigintMissingESNext.symbols b/tests/baselines/reference/bigintMissingESNext.symbols new file mode 100644 index 0000000000000..bd500ba04b04e --- /dev/null +++ b/tests/baselines/reference/bigintMissingESNext.symbols @@ -0,0 +1,17 @@ +=== tests/cases/conformance/es2020/bigintMissingESNext.ts === +declare function test(): void; +>test : Symbol(test, Decl(bigintMissingESNext.ts, 0, 0)) +>A : Symbol(A, Decl(bigintMissingESNext.ts, 0, 22)) +>B : Symbol(B, Decl(bigintMissingESNext.ts, 0, 24)) +>A : Symbol(A, Decl(bigintMissingESNext.ts, 0, 22)) + +test<{t?: string}, object>(); +>test : Symbol(test, Decl(bigintMissingESNext.ts, 0, 0)) +>t : Symbol(t, Decl(bigintMissingESNext.ts, 2, 6)) + +test<{t?: string}, bigint>(); +>test : Symbol(test, Decl(bigintMissingESNext.ts, 0, 0)) +>t : Symbol(t, Decl(bigintMissingESNext.ts, 3, 6)) + +// should have global error when bigint is used but ES2020 lib is not present + diff --git a/tests/baselines/reference/bigintMissingESNext.types b/tests/baselines/reference/bigintMissingESNext.types new file mode 100644 index 0000000000000..6665aac1d5c9b --- /dev/null +++ b/tests/baselines/reference/bigintMissingESNext.types @@ -0,0 +1,16 @@ +=== tests/cases/conformance/es2020/bigintMissingESNext.ts === +declare function test(): void; +>test : () => void + +test<{t?: string}, object>(); +>test<{t?: string}, object>() : void +>test : () => void +>t : string + +test<{t?: string}, bigint>(); +>test<{t?: string}, bigint>() : void +>test : () => void +>t : string + +// should have global error when bigint is used but ES2020 lib is not present + diff --git a/tests/cases/conformance/es2020/bigintMissingES2019.ts b/tests/cases/conformance/es2020/bigintMissingES2019.ts new file mode 100644 index 0000000000000..eb43cef7986fb --- /dev/null +++ b/tests/cases/conformance/es2020/bigintMissingES2019.ts @@ -0,0 +1,8 @@ +// @target: es2019 +// @lib: dom,es2019 +declare function test(): void; + +test<{t?: string}, object>(); +test<{t?: string}, bigint>(); + +// no error when bigint is used even when ES2020 lib is not present diff --git a/tests/cases/conformance/es2020/bigintMissingES2020.ts b/tests/cases/conformance/es2020/bigintMissingES2020.ts new file mode 100644 index 0000000000000..dc2f459e034f5 --- /dev/null +++ b/tests/cases/conformance/es2020/bigintMissingES2020.ts @@ -0,0 +1,8 @@ +// @target: es2020 +// @lib: dom,es2017 +declare function test(): void; + +test<{t?: string}, object>(); +test<{t?: string}, bigint>(); + +// should have global error when bigint is used but ES2020 lib is not present diff --git a/tests/cases/conformance/es2020/bigintMissingESNext.ts b/tests/cases/conformance/es2020/bigintMissingESNext.ts new file mode 100644 index 0000000000000..f3d90f64bde45 --- /dev/null +++ b/tests/cases/conformance/es2020/bigintMissingESNext.ts @@ -0,0 +1,8 @@ +// @target: esnext +// @lib: dom,es2017 +declare function test(): void; + +test<{t?: string}, object>(); +test<{t?: string}, bigint>(); + +// should have global error when bigint is used but ES2020 lib is not present