Skip to content

Commit 0eca6b0

Browse files
authored
fix(40365): handle deprecated properties of merged interfaces (#51640)
1 parent e9e7a9d commit 0eca6b0

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/compiler/checker.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2272,6 +2272,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
22722272
}
22732273

22742274
function isDeprecatedSymbol(symbol: Symbol) {
2275+
if (length(symbol.declarations) > 1) {
2276+
const parentSymbol = getParentOfSymbol(symbol);
2277+
if (parentSymbol && parentSymbol.flags & SymbolFlags.Interface) {
2278+
return some(symbol.declarations, d => !!(getCombinedNodeFlags(d) & NodeFlags.Deprecated));
2279+
}
2280+
}
22752281
return !!(getDeclarationNodeFlagsFromSymbol(symbol) & NodeFlags.Deprecated);
22762282
}
22772283

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
///<reference path="fourslash.ts" />
2+
3+
////interface I {
4+
//// x: number;
5+
//// y: number;
6+
////}
7+
////interface I {
8+
//// /** @deprecated */
9+
//// x: number;
10+
////}
11+
////const foo: I = { x: 1, y: 1 };
12+
////foo.[|x|];
13+
14+
const [range] = test.ranges();
15+
verify.getSuggestionDiagnostics([
16+
{
17+
"code": 6385,
18+
"message": "'x' is deprecated.",
19+
"reportsDeprecated": true,
20+
"range": range
21+
},
22+
]);

0 commit comments

Comments
 (0)