@@ -933,6 +933,7 @@ namespace ts {
933
933
let deferredGlobalTemplateStringsArrayType: ObjectType | undefined;
934
934
let deferredGlobalImportMetaType: ObjectType;
935
935
let deferredGlobalImportMetaExpressionType: ObjectType;
936
+ let deferredGlobalImportCallOptionsType: ObjectType | undefined;
936
937
let deferredGlobalExtractSymbol: Symbol | undefined;
937
938
let deferredGlobalOmitSymbol: Symbol | undefined;
938
939
let deferredGlobalAwaitedSymbol: Symbol | undefined;
@@ -13460,6 +13461,11 @@ namespace ts {
13460
13461
return deferredGlobalImportMetaExpressionType;
13461
13462
}
13462
13463
13464
+ function getGlobalImportCallOptionsType(reportErrors: boolean) {
13465
+ // We always report an error, so store a result in the event we could not resolve the symbol to prevent reporting it multiple times
13466
+ return (deferredGlobalImportCallOptionsType ||= getGlobalType("ImportCallOptions" as __String, /*arity*/ 0, reportErrors)) || emptyObjectType;
13467
+ }
13468
+
13463
13469
function getGlobalESSymbolConstructorSymbol(reportErrors: boolean): Symbol | undefined {
13464
13470
return deferredGlobalESSymbolConstructorSymbol ||= getGlobalValueSymbol("Symbol" as __String, reportErrors);
13465
13471
}
@@ -30587,15 +30593,23 @@ namespace ts {
30587
30593
}
30588
30594
const specifier = node.arguments[0];
30589
30595
const specifierType = checkExpressionCached(specifier);
30596
+ const optionsType = node.arguments.length > 1 ? checkExpressionCached(node.arguments[1]) : undefined;
30590
30597
// Even though multiple arguments is grammatically incorrect, type-check extra arguments for completion
30591
- for (let i = 1 ; i < node.arguments.length; ++i) {
30598
+ for (let i = 2 ; i < node.arguments.length; ++i) {
30592
30599
checkExpressionCached(node.arguments[i]);
30593
30600
}
30594
30601
30595
30602
if (specifierType.flags & TypeFlags.Undefined || specifierType.flags & TypeFlags.Null || !isTypeAssignableTo(specifierType, stringType)) {
30596
30603
error(specifier, Diagnostics.Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0, typeToString(specifierType));
30597
30604
}
30598
30605
30606
+ if (optionsType) {
30607
+ const importCallOptionsType = getGlobalImportCallOptionsType(/*reportErrors*/ true);
30608
+ if (importCallOptionsType !== emptyObjectType) {
30609
+ checkTypeAssignableTo(optionsType, getNullableType(importCallOptionsType, TypeFlags.Undefined), node.arguments[1]);
30610
+ }
30611
+ }
30612
+
30599
30613
// resolveExternalModuleName will return undefined if the moduleReferenceExpression is not a string literal
30600
30614
const moduleSymbol = resolveExternalModuleName(node, specifier);
30601
30615
if (moduleSymbol) {
@@ -43178,19 +43192,19 @@ namespace ts {
43178
43192
43179
43193
if (nodeArguments.length > 1) {
43180
43194
const assertionArgument = nodeArguments[1];
43181
- return grammarErrorOnNode(assertionArgument, Diagnostics.Dynamic_import_only_supports_a_second_argument_when_the_module_option_is_set_to_esnext );
43195
+ return grammarErrorOnNode(assertionArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext );
43182
43196
}
43183
43197
}
43184
43198
43185
- if (nodeArguments.length === 0 || nodeArguments.length > 2) {
43186
- return grammarErrorOnNode(node, Diagnostics.Dynamic_import_must_only_have_a_specifier_and_an_optional_assertion_as_arguments );
43199
+ if (nodeArguments.length === 0 || nodeArguments.length > 2) {
43200
+ return grammarErrorOnNode(node, Diagnostics.Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_assertion_as_arguments );
43187
43201
}
43188
43202
43189
43203
// see: parseArgumentOrArrayLiteralElement...we use this function which parse arguments of callExpression to parse specifier for dynamic import.
43190
43204
// parseArgumentOrArrayLiteralElement allows spread element to be in an argument list which is not allowed as specifier in dynamic import.
43191
- const spreadElement = forEach (nodeArguments, isSpreadElement);
43205
+ const spreadElement = find (nodeArguments, isSpreadElement);
43192
43206
if (spreadElement) {
43193
- return grammarErrorOnNode(nodeArguments[0] , Diagnostics.Specifier_of_dynamic_import_cannot_be_spread_element );
43207
+ return grammarErrorOnNode(spreadElement , Diagnostics.Argument_of_dynamic_import_cannot_be_spread_element );
43194
43208
}
43195
43209
return false;
43196
43210
}
0 commit comments