From 956436853e82643c4a4af63a80aceebd7ccc2ecb Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Wed, 24 Apr 2019 10:35:23 -0700 Subject: [PATCH] Fix crash getting error for type alias index signature without a type --- src/compiler/checker.ts | 2 +- .../reference/indexerConstraints2.errors.txt | 13 +++++++++++-- tests/baselines/reference/indexerConstraints2.js | 8 +++++++- .../baselines/reference/indexerConstraints2.symbols | 12 ++++++++++++ tests/baselines/reference/indexerConstraints2.types | 9 +++++++++ tests/cases/compiler/indexerConstraints2.ts | 7 ++++++- 6 files changed, 46 insertions(+), 5 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 22a658a0f7ab3..ce56db4b962f4 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -31005,7 +31005,7 @@ namespace ts { Diagnostics.An_index_signature_parameter_type_cannot_be_a_type_alias_Consider_writing_0_Colon_1_Colon_2_instead, getTextOfNode(parameter.name), typeToString(type), - typeToString(getTypeFromTypeNode(node.type!))); + typeToString(node.type ? getTypeFromTypeNode(node.type) : anyType)); } if (type.flags & TypeFlags.Union && allTypesAssignableToKind(type, TypeFlags.StringLiteral, /*strict*/ true)) { diff --git a/tests/baselines/reference/indexerConstraints2.errors.txt b/tests/baselines/reference/indexerConstraints2.errors.txt index 7e104e77f9865..aca2af28adc12 100644 --- a/tests/baselines/reference/indexerConstraints2.errors.txt +++ b/tests/baselines/reference/indexerConstraints2.errors.txt @@ -9,9 +9,10 @@ tests/cases/compiler/indexerConstraints2.ts(58,6): error TS1023: An index signat tests/cases/compiler/indexerConstraints2.ts(64,6): error TS1023: An index signature parameter type must be 'string' or 'number'. tests/cases/compiler/indexerConstraints2.ts(70,6): error TS1023: An index signature parameter type must be 'string' or 'number'. tests/cases/compiler/indexerConstraints2.ts(74,6): error TS1337: An index signature parameter type cannot be a union type. Consider using a mapped object type instead. +tests/cases/compiler/indexerConstraints2.ts(79,6): error TS1336: An index signature parameter type cannot be a type alias. Consider writing '[key: string]: any' instead. -==== tests/cases/compiler/indexerConstraints2.ts (11 errors) ==== +==== tests/cases/compiler/indexerConstraints2.ts (12 errors) ==== class A { a: number; } class B extends A { b: number; } @@ -108,4 +109,12 @@ tests/cases/compiler/indexerConstraints2.ts(74,6): error TS1337: An index signat [u: "foo" | "bar"]: A; ~ !!! error TS1337: An index signature parameter type cannot be a union type. Consider using a mapped object type instead. - } \ No newline at end of file + } + + type Key = string; + interface T { + [key: Key] + ~~~ +!!! error TS1336: An index signature parameter type cannot be a type alias. Consider writing '[key: string]: any' instead. + } + \ No newline at end of file diff --git a/tests/baselines/reference/indexerConstraints2.js b/tests/baselines/reference/indexerConstraints2.js index 95d9425519525..634be50d22b76 100644 --- a/tests/baselines/reference/indexerConstraints2.js +++ b/tests/baselines/reference/indexerConstraints2.js @@ -73,7 +73,13 @@ interface R { interface S { [u: "foo" | "bar"]: A; -} +} + +type Key = string; +interface T { + [key: Key] +} + //// [indexerConstraints2.js] var __extends = (this && this.__extends) || (function () { diff --git a/tests/baselines/reference/indexerConstraints2.symbols b/tests/baselines/reference/indexerConstraints2.symbols index 4cb5558a8cea5..b2c90f0c1d29d 100644 --- a/tests/baselines/reference/indexerConstraints2.symbols +++ b/tests/baselines/reference/indexerConstraints2.symbols @@ -155,3 +155,15 @@ interface S { >u : Symbol(u, Decl(indexerConstraints2.ts, 73, 5)) >A : Symbol(A, Decl(indexerConstraints2.ts, 0, 0)) } + +type Key = string; +>Key : Symbol(Key, Decl(indexerConstraints2.ts, 74, 1)) + +interface T { +>T : Symbol(T, Decl(indexerConstraints2.ts, 76, 18)) + + [key: Key] +>key : Symbol(key, Decl(indexerConstraints2.ts, 78, 5)) +>Key : Symbol(Key, Decl(indexerConstraints2.ts, 74, 1)) +} + diff --git a/tests/baselines/reference/indexerConstraints2.types b/tests/baselines/reference/indexerConstraints2.types index dabe7bca687dc..1f5423b594878 100644 --- a/tests/baselines/reference/indexerConstraints2.types +++ b/tests/baselines/reference/indexerConstraints2.types @@ -118,3 +118,12 @@ interface S { [u: "foo" | "bar"]: A; >u : IndexableUnion } + +type Key = string; +>Key : string + +interface T { + [key: Key] +>key : string +} + diff --git a/tests/cases/compiler/indexerConstraints2.ts b/tests/cases/compiler/indexerConstraints2.ts index 38b4ddec41a3d..caa7ca719f333 100644 --- a/tests/cases/compiler/indexerConstraints2.ts +++ b/tests/cases/compiler/indexerConstraints2.ts @@ -72,4 +72,9 @@ interface R { interface S { [u: "foo" | "bar"]: A; -} \ No newline at end of file +} + +type Key = string; +interface T { + [key: Key] +}