From 2d80253d09853304e6e15b7f1d52d59a7776b8a6 Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 12 Feb 2018 11:09:50 -0800 Subject: [PATCH] Fix error message for implicit-any property in object literal with symbol key (#21883) --- src/compiler/checker.ts | 2 +- .../objectLiteralPropertyImplicitlyAny.errors.txt | 9 +++++++++ .../objectLiteralPropertyImplicitlyAny.js | 8 ++++++++ .../objectLiteralPropertyImplicitlyAny.symbols | 12 ++++++++++++ .../objectLiteralPropertyImplicitlyAny.types | 15 +++++++++++++++ .../objectLiteralPropertyImplicitlyAny.ts | 5 +++++ 6 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/objectLiteralPropertyImplicitlyAny.errors.txt create mode 100644 tests/baselines/reference/objectLiteralPropertyImplicitlyAny.js create mode 100644 tests/baselines/reference/objectLiteralPropertyImplicitlyAny.symbols create mode 100644 tests/baselines/reference/objectLiteralPropertyImplicitlyAny.types create mode 100644 tests/cases/compiler/objectLiteralPropertyImplicitlyAny.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 027e8f095a0..d336336f549 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11203,7 +11203,7 @@ namespace ts { const t = getTypeOfSymbol(p); if (t.flags & TypeFlags.ContainsWideningType) { if (!reportWideningErrorsInType(t)) { - error(p.valueDeclaration, Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, symbolName(p), typeToString(getWidenedType(t))); + error(p.valueDeclaration, Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, symbolToString(p), typeToString(getWidenedType(t))); } errorReported = true; } diff --git a/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.errors.txt b/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.errors.txt new file mode 100644 index 00000000000..3fd7aea4503 --- /dev/null +++ b/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.errors.txt @@ -0,0 +1,9 @@ +tests/cases/compiler/objectLiteralPropertyImplicitlyAny.ts(2,13): error TS7018: Object literal's property '[foo]' implicitly has an 'any' type. + + +==== tests/cases/compiler/objectLiteralPropertyImplicitlyAny.ts (1 errors) ==== + const foo = Symbol.for("foo"); + const o = { [foo]: undefined }; + ~~~~~~~~~~~~~~~~ +!!! error TS7018: Object literal's property '[foo]' implicitly has an 'any' type. + \ No newline at end of file diff --git a/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.js b/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.js new file mode 100644 index 00000000000..f779b5095e1 --- /dev/null +++ b/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.js @@ -0,0 +1,8 @@ +//// [objectLiteralPropertyImplicitlyAny.ts] +const foo = Symbol.for("foo"); +const o = { [foo]: undefined }; + + +//// [objectLiteralPropertyImplicitlyAny.js] +const foo = Symbol.for("foo"); +const o = { [foo]: undefined }; diff --git a/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.symbols b/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.symbols new file mode 100644 index 00000000000..570a6d8212d --- /dev/null +++ b/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.symbols @@ -0,0 +1,12 @@ +=== tests/cases/compiler/objectLiteralPropertyImplicitlyAny.ts === +const foo = Symbol.for("foo"); +>foo : Symbol(foo, Decl(objectLiteralPropertyImplicitlyAny.ts, 0, 5)) +>Symbol.for : Symbol(SymbolConstructor.for, Decl(lib.es2015.symbol.d.ts, --, --)) +>Symbol : Symbol(Symbol, Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --), Decl(lib.es2015.symbol.d.ts, --, --)) +>for : Symbol(SymbolConstructor.for, Decl(lib.es2015.symbol.d.ts, --, --)) + +const o = { [foo]: undefined }; +>o : Symbol(o, Decl(objectLiteralPropertyImplicitlyAny.ts, 1, 5)) +>foo : Symbol(foo, Decl(objectLiteralPropertyImplicitlyAny.ts, 0, 5)) +>undefined : Symbol(undefined) + diff --git a/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.types b/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.types new file mode 100644 index 00000000000..36d33fa6841 --- /dev/null +++ b/tests/baselines/reference/objectLiteralPropertyImplicitlyAny.types @@ -0,0 +1,15 @@ +=== tests/cases/compiler/objectLiteralPropertyImplicitlyAny.ts === +const foo = Symbol.for("foo"); +>foo : unique symbol +>Symbol.for("foo") : unique symbol +>Symbol.for : (key: string) => symbol +>Symbol : SymbolConstructor +>for : (key: string) => symbol +>"foo" : "foo" + +const o = { [foo]: undefined }; +>o : { [foo]: any; } +>{ [foo]: undefined } : { [foo]: undefined; } +>foo : unique symbol +>undefined : undefined + diff --git a/tests/cases/compiler/objectLiteralPropertyImplicitlyAny.ts b/tests/cases/compiler/objectLiteralPropertyImplicitlyAny.ts new file mode 100644 index 00000000000..e87d279c401 --- /dev/null +++ b/tests/cases/compiler/objectLiteralPropertyImplicitlyAny.ts @@ -0,0 +1,5 @@ +// @target: esnext +// @noImplicitAny: true + +const foo = Symbol.for("foo"); +const o = { [foo]: undefined };