Skip to content

Commit 3741ea2

Browse files
committed
Code review
1 parent 199c854 commit 3741ea2

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

src/compiler/checker.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6315,7 +6315,7 @@ module ts {
63156315
if (allConstituentTypesHaveKind(indexType, TypeFlags.Any | TypeFlags.StringLike | TypeFlags.NumberLike | TypeFlags.ESSymbol)) {
63166316

63176317
// Try to use a number indexer.
6318-
if (allConstituentTypesHaveKind(indexType, TypeFlags.Any | TypeFlags.NumberLike )) {
6318+
if (allConstituentTypesHaveKind(indexType, TypeFlags.Any | TypeFlags.NumberLike)) {
63196319
let numberIndexType = getIndexTypeOfType(objectType, IndexKind.Number);
63206320
if (numberIndexType) {
63216321
return numberIndexType;
@@ -12100,6 +12100,20 @@ module ts {
1210012100
return false;
1210112101
}
1210212102

12103+
function isValidTypeOfIndexSignatureParameter(parameter: ParameterDeclaration): boolean {
12104+
if (parameter.type.kind === SyntaxKind.StringKeyword || parameter.type.kind === SyntaxKind.NumberKeyword) {
12105+
return true;
12106+
}
12107+
12108+
if (parameter.type.kind === SyntaxKind.TypeReference) {
12109+
var type = getTypeFromTypeReference(<TypeReferenceNode>(parameter.type));
12110+
if (type.flags & TypeFlags.NumberLike) {
12111+
return true;
12112+
}
12113+
}
12114+
return false;
12115+
}
12116+
1210312117
function checkGrammarIndexSignatureParameters(node: SignatureDeclaration): boolean {
1210412118
let parameter = node.parameters[0];
1210512119
if (node.parameters.length !== 1) {
@@ -12125,14 +12139,8 @@ module ts {
1212512139
if (!parameter.type) {
1212612140
return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_must_have_a_type_annotation);
1212712141
}
12128-
if (parameter.type.kind === SyntaxKind.TypeReference) {
12129-
var type = getTypeFromTypeReference(<TypeReferenceNode>(parameter.type));
12130-
if (!(type.flags & TypeFlags.NumberLike)) {
12131-
return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_type_must_be_string_number_or_Enum);
12132-
}
12133-
12134-
} else if (parameter.type.kind !== SyntaxKind.StringKeyword && parameter.type.kind !== SyntaxKind.NumberKeyword) {
12135-
return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_type_must_be_string_number_or_Enum);
12142+
if (!isValidTypeOfIndexSignatureParameter(parameter)) {
12143+
return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_type_must_be_string_number_or_an_enum_type);
1213612144
}
1213712145
if (!node.type) {
1213812146
return grammarErrorOnNode(node, Diagnostics.An_index_signature_must_have_a_type_annotation);

src/compiler/diagnosticInformationMap.generated.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ module ts {
1818
An_index_signature_parameter_cannot_have_an_initializer: { code: 1020, category: DiagnosticCategory.Error, key: "An index signature parameter cannot have an initializer." },
1919
An_index_signature_must_have_a_type_annotation: { code: 1021, category: DiagnosticCategory.Error, key: "An index signature must have a type annotation." },
2020
An_index_signature_parameter_must_have_a_type_annotation: { code: 1022, category: DiagnosticCategory.Error, key: "An index signature parameter must have a type annotation." },
21-
An_index_signature_parameter_type_must_be_string_number_or_Enum: { code: 1023, category: DiagnosticCategory.Error, key: "An index signature parameter type must be 'string', 'number' or Enum." },
21+
An_index_signature_parameter_type_must_be_string_number_or_an_enum_type: { code: 1023, category: DiagnosticCategory.Error, key: "An index signature parameter type must be 'string', 'number', or an enum type." },
2222
A_class_or_interface_declaration_can_only_have_one_extends_clause: { code: 1024, category: DiagnosticCategory.Error, key: "A class or interface declaration can only have one 'extends' clause." },
2323
An_extends_clause_must_precede_an_implements_clause: { code: 1025, category: DiagnosticCategory.Error, key: "An 'extends' clause must precede an 'implements' clause." },
2424
A_class_can_only_extend_a_single_class: { code: 1026, category: DiagnosticCategory.Error, key: "A class can only extend a single class." },

src/compiler/diagnosticMessages.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
"category": "Error",
6464
"code": 1022
6565
},
66-
"An index signature parameter type must be 'string', 'number' or Enum.": {
66+
"An index signature parameter type must be 'string', 'number', or an enum type.": {
6767
"category": "Error",
6868
"code": 1023
6969
},

0 commit comments

Comments
 (0)