Avoid check for union keys (#39314)
This commit is contained in:
parent
0d84f210b7
commit
453365284c
|
@ -13290,13 +13290,13 @@ namespace ts {
|
|||
&& every(symbol.declarations, d => !isFunctionLike(d) || !!(d.flags & NodeFlags.Deprecated));
|
||||
}
|
||||
|
||||
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.valueDeclaration?.flags & NodeFlags.Deprecated && isUncalledFunctionReference(accessNode, prop)) {
|
||||
if (reportDeprecated && accessNode && prop.valueDeclaration?.flags & NodeFlags.Deprecated && isUncalledFunctionReference(accessNode, prop)) {
|
||||
const deprecatedNode = accessExpression?.argumentExpression ?? (isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode);
|
||||
errorOrSuggestion(/* isError */ false, deprecatedNode, Diagnostics._0_is_deprecated, propName as string);
|
||||
}
|
||||
|
@ -13666,7 +13666,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) {
|
||||
|
|
50
tests/cases/fourslash/jsdocDeprecated_suggestion4.ts
Normal file
50
tests/cases/fourslash/jsdocDeprecated_suggestion4.ts
Normal file
|
@ -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,
|
||||
}
|
||||
])
|
Loading…
Reference in a new issue