mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-01 00:22:00 -05:00
Module or import types (#22592)
* Type side of import types * Value side of import types * Accept library changes * Refined implementation, more tests * Allow resolutions to be performed late if the resolution still results in a file already in the build * Add another test case * Add some jsdoc usages * Allow nodebuilder to use import types where appropriate * Parse & check generic instantiations * use import types in nodebuilder for typeof module symbols * Wire up go to definition for import types * Accept updated type/symbol baselines now that symbols are wired in * PR feedback * Fix changes from merge * Walk back late import handling * Remove unused diagnostic * Remove unrelated changes * Use recursive function over loop * Emit type arguments * undo unrelated change * Test for and support import type nodes in bundled declaration emit
This commit is contained in:
@@ -189,6 +189,10 @@ namespace ts {
|
||||
visitNode(cbNode, (<ConditionalTypeNode>node).falseType);
|
||||
case SyntaxKind.InferType:
|
||||
return visitNode(cbNode, (<InferTypeNode>node).typeParameter);
|
||||
case SyntaxKind.ImportTypeNode:
|
||||
return visitNode(cbNode, (<ImportTypeNode>node).argument) ||
|
||||
visitNode(cbNode, (<ImportTypeNode>node).qualifier) ||
|
||||
visitNodes(cbNode, cbNodes, (<ImportTypeNode>node).typeArguments);
|
||||
case SyntaxKind.ParenthesizedType:
|
||||
case SyntaxKind.TypeOperator:
|
||||
return visitNode(cbNode, (<ParenthesizedTypeNode | TypeOperatorNode>node).type);
|
||||
@@ -2733,6 +2737,28 @@ namespace ts {
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
function isStartOfTypeOfImportType() {
|
||||
nextToken();
|
||||
return token() === SyntaxKind.ImportKeyword;
|
||||
}
|
||||
|
||||
function parseImportType(): ImportTypeNode {
|
||||
sourceFile.flags |= NodeFlags.PossiblyContainsDynamicImport;
|
||||
const node = createNode(SyntaxKind.ImportTypeNode) as ImportTypeNode;
|
||||
if (parseOptional(SyntaxKind.TypeOfKeyword)) {
|
||||
node.isTypeOf = true;
|
||||
}
|
||||
parseExpected(SyntaxKind.ImportKeyword);
|
||||
parseExpected(SyntaxKind.OpenParenToken);
|
||||
node.argument = parseType();
|
||||
parseExpected(SyntaxKind.CloseParenToken);
|
||||
if (parseOptional(SyntaxKind.DotToken)) {
|
||||
node.qualifier = parseEntityName(/*allowReservedWords*/ true, Diagnostics.Type_expected);
|
||||
}
|
||||
node.typeArguments = tryParseTypeArguments();
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
function nextTokenIsNumericLiteral() {
|
||||
return nextToken() === SyntaxKind.NumericLiteral;
|
||||
}
|
||||
@@ -2780,13 +2806,15 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
case SyntaxKind.TypeOfKeyword:
|
||||
return parseTypeQuery();
|
||||
return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery();
|
||||
case SyntaxKind.OpenBraceToken:
|
||||
return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral();
|
||||
case SyntaxKind.OpenBracketToken:
|
||||
return parseTupleType();
|
||||
case SyntaxKind.OpenParenToken:
|
||||
return parseParenthesizedType();
|
||||
case SyntaxKind.ImportKeyword:
|
||||
return parseImportType();
|
||||
default:
|
||||
return parseTypeReference();
|
||||
}
|
||||
@@ -2822,6 +2850,7 @@ namespace ts {
|
||||
case SyntaxKind.ExclamationToken:
|
||||
case SyntaxKind.DotDotDotToken:
|
||||
case SyntaxKind.InferKeyword:
|
||||
case SyntaxKind.ImportKeyword:
|
||||
return true;
|
||||
case SyntaxKind.MinusToken:
|
||||
return !inStartOfParameter && lookAhead(nextTokenIsNumericLiteral);
|
||||
|
||||
Reference in New Issue
Block a user