@@ -911,6 +911,7 @@ import {
911911 NodeBuilderFlags,
912912 nodeCanBeDecorated,
913913 NodeCheckFlags,
914+ nodeCoreModules,
914915 NodeFlags,
915916 nodeHasName,
916917 nodeIsMissing,
@@ -1121,6 +1122,7 @@ import {
11211122 UnionType,
11221123 UnionTypeNode,
11231124 UniqueESSymbolType,
1125+ usesWildcardTypes,
11241126 usingSingleLineStringWriter,
11251127 VariableDeclaration,
11261128 VariableDeclarationList,
@@ -4708,9 +4710,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
47084710
47094711 function resolveExternalModuleName(location: Node, moduleReferenceExpression: Expression, ignoreErrors?: boolean, errorMessage?: DiagnosticMessage): Symbol | undefined {
47104712 const isClassic = getEmitModuleResolutionKind(compilerOptions) === ModuleResolutionKind.Classic;
4711- errorMessage ??= isClassic ?
4713+ errorMessage ??= getCannotResolveModuleNameErrorForSpecificModule(moduleReferenceExpression) ?? ( isClassic ?
47124714 Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option
4713- : Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations;
4715+ : Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations) ;
47144716 return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? undefined : errorMessage, ignoreErrors);
47154717 }
47164718
@@ -27643,27 +27645,29 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2764327645 case "console":
2764427646 return Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom;
2764527647 case "$":
27646- return compilerOptions.types
27647- ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig
27648- : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery;
27648+ return usesWildcardTypes(compilerOptions)
27649+ ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery
27650+ : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig;
27651+ case "beforeEach":
2764927652 case "describe":
2765027653 case "suite":
2765127654 case "it":
2765227655 case "test":
27653- return compilerOptions.types
27654- ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig
27655- : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha ;
27656+ return usesWildcardTypes( compilerOptions)
27657+ ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha
27658+ : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig ;
2765627659 case "process":
2765727660 case "require":
2765827661 case "Buffer":
2765927662 case "module":
27660- return compilerOptions.types
27661- ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig
27662- : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode;
27663+ case "NodeJS":
27664+ return usesWildcardTypes(compilerOptions)
27665+ ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode
27666+ : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig;
2766327667 case "Bun":
27664- return compilerOptions.types
27665- ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_and_then_add_bun_to_the_types_field_in_your_tsconfig
27666- : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun ;
27668+ return usesWildcardTypes( compilerOptions)
27669+ ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun
27670+ : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_and_then_add_bun_to_the_types_field_in_your_tsconfig ;
2766727671 case "Map":
2766827672 case "Set":
2766927673 case "Promise":
@@ -27698,6 +27702,20 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2769827702 }
2769927703 }
2770027704
27705+ function getCannotResolveModuleNameErrorForSpecificModule(moduleName: Expression): DiagnosticMessage | undefined {
27706+ if (moduleName.kind === SyntaxKind.StringLiteral) {
27707+ if (nodeCoreModules.has((moduleName as StringLiteral).text)) {
27708+ if (usesWildcardTypes(compilerOptions)) {
27709+ return Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode;
27710+ }
27711+ else {
27712+ return Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig;
27713+ }
27714+ }
27715+ }
27716+ return undefined;
27717+ }
27718+
2770127719 function getResolvedSymbol(node: Identifier): Symbol {
2770227720 const links = getNodeLinks(node);
2770327721 if (!links.resolvedSymbol) {
0 commit comments