diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 11ed55a2c79d2..d527092fa4470 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -28515,6 +28515,9 @@ namespace ts { if (compilerOptions.noPropertyAccessFromIndexSignature && isPropertyAccessExpression(node)) { error(right, Diagnostics.Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0, unescapeLeadingUnderscores(right.escapedText)); } + if (indexInfo.declaration && getCombinedNodeFlags(indexInfo.declaration) & NodeFlags.Deprecated) { + addDeprecatedSuggestion(right, [indexInfo.declaration], right.escapedText as string); + } } else { if (isDeprecatedSymbol(prop) && isUncalledFunctionReference(node, prop) && prop.declarations) { diff --git a/tests/cases/fourslash/jsdocDeprecated_suggestion17.ts b/tests/cases/fourslash/jsdocDeprecated_suggestion17.ts new file mode 100644 index 0000000000000..2e2353fecdb6a --- /dev/null +++ b/tests/cases/fourslash/jsdocDeprecated_suggestion17.ts @@ -0,0 +1,31 @@ +/// + +// @filename: foo.ts +////interface Foo { +//// /** @deprecated */ +//// [k: string]: any; +//// /** @deprecated please use `.y` instead */ +//// x: number; +//// y: number; +////} +////function f(foo: Foo) { +//// foo.[|x|]; +//// foo.[|y|]; +//// foo.[|z|]; +////} + +const ranges = test.ranges(); +verify.getSuggestionDiagnostics([ + { + "code": 6385, + "message": "'x' is deprecated.", + "reportsDeprecated": true, + "range": ranges[0] + }, + { + "code": 6385, + "message": "'z' is deprecated.", + "reportsDeprecated": true, + "range": ranges[2] + }, +]);