From 17b97ccc434ff68218dcc38fa0a9c3c610bc03bd Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Tue, 8 Feb 2022 21:36:45 +0200 Subject: [PATCH] fix(47788): forbid convertToMappedObjectType QF in invalid index signatures (#47798) --- src/services/codefixes/convertToMappedObjectType.ts | 9 ++++++--- .../fourslash/codeFixConvertToMappedObjectType13.ts | 7 +++++++ 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 tests/cases/fourslash/codeFixConvertToMappedObjectType13.ts diff --git a/src/services/codefixes/convertToMappedObjectType.ts b/src/services/codefixes/convertToMappedObjectType.ts index 340fcf2257c..7f9f6af4e80 100644 --- a/src/services/codefixes/convertToMappedObjectType.ts +++ b/src/services/codefixes/convertToMappedObjectType.ts @@ -25,9 +25,12 @@ namespace ts.codefix { interface Info { readonly indexSignature: IndexSignatureDeclaration; readonly container: FixableDeclaration; } function getInfo(sourceFile: SourceFile, pos: number): Info | undefined { const token = getTokenAtPosition(sourceFile, pos); - const indexSignature = cast(token.parent.parent, isIndexSignatureDeclaration); - if (isClassDeclaration(indexSignature.parent)) return undefined; - const container = isInterfaceDeclaration(indexSignature.parent) ? indexSignature.parent : cast(indexSignature.parent.parent, isTypeAliasDeclaration); + const indexSignature = tryCast(token.parent.parent, isIndexSignatureDeclaration); + if (!indexSignature) return undefined; + + const container = isInterfaceDeclaration(indexSignature.parent) ? indexSignature.parent : tryCast(indexSignature.parent.parent, isTypeAliasDeclaration); + if (!container) return undefined; + return { indexSignature, container }; } diff --git a/tests/cases/fourslash/codeFixConvertToMappedObjectType13.ts b/tests/cases/fourslash/codeFixConvertToMappedObjectType13.ts new file mode 100644 index 00000000000..c5655f99f58 --- /dev/null +++ b/tests/cases/fourslash/codeFixConvertToMappedObjectType13.ts @@ -0,0 +1,7 @@ +/// + +////let x: { +//// [p: ""]: string; +////} + +verify.not.codeFixAvailable("fixConvertToMappedObjectType");