diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json
index 0d9e7a0a6bf..1ffc78134c3 100644
--- a/src/compiler/diagnosticMessages.json
+++ b/src/compiler/diagnosticMessages.json
@@ -3657,6 +3657,10 @@
"category": "Message",
"code": 90025
},
+ "Rewrite as the indexed access type '{0}'.": {
+ "category": "Message",
+ "code": 90026
+ },
"Convert function to an ES2015 class": {
"category": "Message",
diff --git a/src/services/codefixes/correctQualifiedNameToIndexedAccessType.ts b/src/services/codefixes/correctQualifiedNameToIndexedAccessType.ts
new file mode 100644
index 00000000000..3087d73276d
--- /dev/null
+++ b/src/services/codefixes/correctQualifiedNameToIndexedAccessType.ts
@@ -0,0 +1,27 @@
+/* @internal */
+namespace ts.codefix {
+ registerCodeFix({
+ errorCodes: [Diagnostics.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1.code],
+ getCodeActions: (context: CodeFixContext) => {
+ const sourceFile = context.sourceFile;
+ const token = getTokenAtPosition(sourceFile, context.span.start, /*includeJsDocComment*/ false);
+ const qualifiedName = getAncestor(token, SyntaxKind.QualifiedName) as QualifiedName;
+ Debug.assert(!!qualifiedName, "Expected position to be owned by a qualified name.");
+ if (!isIdentifier(qualifiedName.left)) {
+ return undefined;
+ }
+ const leftText = qualifiedName.left.getText(sourceFile);
+ const rightText = qualifiedName.right.getText(sourceFile);
+ const replacement = createIndexedAccessTypeNode(
+ createTypeReferenceNode(qualifiedName.left, /*typeArguments*/ undefined),
+ createLiteralTypeNode(createLiteral(rightText)));
+ const changeTracker = textChanges.ChangeTracker.fromCodeFixContext(context);
+ changeTracker.replaceNode(sourceFile, qualifiedName, replacement);
+
+ return [{
+ description: formatStringFromArgs(getLocaleSpecificMessage(Diagnostics.Rewrite_as_the_indexed_access_type_0), [`${leftText}["${rightText}"]`]),
+ changes: changeTracker.getChanges()
+ }];
+ }
+ });
+}
diff --git a/src/services/codefixes/fixes.ts b/src/services/codefixes/fixes.ts
index ef670c81ba9..9bc80cad691 100644
--- a/src/services/codefixes/fixes.ts
+++ b/src/services/codefixes/fixes.ts
@@ -1,3 +1,4 @@
+///
///
///
///