Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13274,13 +13274,13 @@ namespace ts {
undefined;
}

function getPropertyTypeForIndexType(originalObjectType: Type, objectType: Type, indexType: Type, fullIndexType: Type, suppressNoImplicitAnyError: boolean, accessNode: ElementAccessExpression | IndexedAccessTypeNode | PropertyName | BindingName | SyntheticExpression | undefined, accessFlags: AccessFlags) {
function getPropertyTypeForIndexType(originalObjectType: Type, objectType: Type, indexType: Type, fullIndexType: Type, suppressNoImplicitAnyError: boolean, accessNode: ElementAccessExpression | IndexedAccessTypeNode | PropertyName | BindingName | SyntheticExpression | undefined, accessFlags: AccessFlags, reportDeprecated?: boolean) {
const accessExpression = accessNode && accessNode.kind === SyntaxKind.ElementAccessExpression ? accessNode : undefined;
const propName = accessNode && isPrivateIdentifier(accessNode) ? undefined : getPropertyNameFromIndex(indexType, accessNode);
if (propName !== undefined) {
const prop = getPropertyOfType(objectType, propName);
if (prop) {
if (accessNode && prop.flags & SymbolFlags.Deprecated) {
if (reportDeprecated && accessNode && prop.flags & SymbolFlags.Deprecated) {
const deprecatedNode = accessExpression?.argumentExpression ?? (isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode);
errorOrSuggestion(/* isError */ false, deprecatedNode, Diagnostics._0_is_deprecated, propName as string);
}
Expand Down Expand Up @@ -13650,7 +13650,7 @@ namespace ts {
}
return accessFlags & AccessFlags.Writing ? getIntersectionType(propTypes, aliasSymbol, aliasTypeArguments) : getUnionType(propTypes, UnionReduction.Literal, aliasSymbol, aliasTypeArguments);
}
return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, /* supressNoImplicitAnyError */ false, accessNode, accessFlags | AccessFlags.CacheSymbol);
return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, /* supressNoImplicitAnyError */ false, accessNode, accessFlags | AccessFlags.CacheSymbol, /* reportDeprecated */ true);
}

function getTypeFromIndexedAccessTypeNode(node: IndexedAccessTypeNode) {
Expand Down
50 changes: 50 additions & 0 deletions tests/cases/fourslash/jsdocDeprecated_suggestion4.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
///<reference path="fourslash.ts" />

//// interface Foo {
//// /** @deprecated */
//// f: number
//// b: number
//// /** @deprecated */
//// baz: number
//// }

//// declare const f: Foo
//// f.[|f|];
//// f.b;
//// f.[|baz|];

//// const kf = 'f'
//// const kb = 'b'
//// declare const k: 'f' | 'b' | 'baz'
//// declare const kfb: 'f' | 'b'
//// declare const kfz: 'f' | 'baz'
//// declare const keys: keyof Foo
//// f[[|kf|]]
//// f[kb]
//// f[k]
//// f[kfb]
//// f[kfz]
//// f[keys]


const ranges = test.ranges();
verify.getSuggestionDiagnostics([
{
message: "'f' is deprecated",
code: 6385,
range: ranges[0],
reportsDeprecated: true,
},
{
message: "'baz' is deprecated",
code: 6385,
range: ranges[1],
reportsDeprecated: true,
},
{
message: "'f' is deprecated",
code: 6385,
range: ranges[2],
reportsDeprecated: true,
}
])