mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-18 17:27:54 -05:00
JSDoc type reference understands require with entity name (#34804)
* resolve require with entity name postfix
For example, `require("x").c`. This is the value equivalent of
`import("x").a.b.c`, but the syntax tree is not as nicely designed for
this purpose.
Fixes #34802
* Add bug number to test
* Add optional chain test
This commit is contained in:
committed by
GitHub
parent
f7cb2f2b86
commit
7635884224
@@ -10765,11 +10765,15 @@ namespace ts {
|
||||
let typeType = valueType;
|
||||
if (symbol.valueDeclaration) {
|
||||
const decl = getRootDeclaration(symbol.valueDeclaration);
|
||||
const isRequireAlias = isVariableDeclaration(decl)
|
||||
&& decl.initializer
|
||||
&& isCallExpression(decl.initializer)
|
||||
&& isRequireCall(decl.initializer, /*requireStringLiteralLikeArgument*/ true)
|
||||
&& valueType.symbol;
|
||||
let isRequireAlias = false;
|
||||
if (isVariableDeclaration(decl) && decl.initializer) {
|
||||
let expr = decl.initializer;
|
||||
// skip past entity names, eg `require("x").a.b.c`
|
||||
while (isPropertyAccessExpression(expr)) {
|
||||
expr = expr.expression;
|
||||
}
|
||||
isRequireAlias = isCallExpression(expr) && isRequireCall(expr, /*requireStringLiteralLikeArgument*/ true) && !!valueType.symbol;
|
||||
}
|
||||
if (isRequireAlias || node.kind === SyntaxKind.ImportType) {
|
||||
typeType = getTypeReferenceType(node, valueType.symbol);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user