(node, diagnostic)
| 70085 | // parameter symbols with declarations that have explicit type annotations. Such references are |
| 70086 | // resolvable with no possibility of triggering circularities in control flow analysis. |
| 70087 | function getTypeOfDottedName(node, diagnostic) { |
| 70088 | if (!(node.flags & 33554432 /* NodeFlags.InWithStatement */)) { |
| 70089 | switch (node.kind) { |
| 70090 | case 79 /* SyntaxKind.Identifier */: |
| 70091 | var symbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(node)); |
| 70092 | return getExplicitTypeOfSymbol(symbol.flags & 2097152 /* SymbolFlags.Alias */ ? resolveAlias(symbol) : symbol, diagnostic); |
| 70093 | case 108 /* SyntaxKind.ThisKeyword */: |
| 70094 | return getExplicitThisType(node); |
| 70095 | case 106 /* SyntaxKind.SuperKeyword */: |
| 70096 | return checkSuperExpression(node); |
| 70097 | case 206 /* SyntaxKind.PropertyAccessExpression */: { |
| 70098 | var type = getTypeOfDottedName(node.expression, diagnostic); |
| 70099 | if (type) { |
| 70100 | var name = node.name; |
| 70101 | var prop = void 0; |
| 70102 | if (ts.isPrivateIdentifier(name)) { |
| 70103 | if (!type.symbol) { |
| 70104 | return undefined; |
| 70105 | } |
| 70106 | prop = getPropertyOfType(type, ts.getSymbolNameForPrivateIdentifier(type.symbol, name.escapedText)); |
| 70107 | } |
| 70108 | else { |
| 70109 | prop = getPropertyOfType(type, name.escapedText); |
| 70110 | } |
| 70111 | return prop && getExplicitTypeOfSymbol(prop, diagnostic); |
| 70112 | } |
| 70113 | return undefined; |
| 70114 | } |
| 70115 | case 212 /* SyntaxKind.ParenthesizedExpression */: |
| 70116 | return getTypeOfDottedName(node.expression, diagnostic); |
| 70117 | } |
| 70118 | } |
| 70119 | } |
| 70120 | function getEffectsSignature(node) { |
| 70121 | var links = getNodeLinks(node); |
| 70122 | var signature = links.effectsSignature; |
no test coverage detected