-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Closed
Labels
Needs InvestigationThis issue needs a team member to investigate its status.This issue needs a team member to investigate its status.
Description
Bug Report
Currently, allowSyntheticDefaultImports is not respected when a file is ModuleKind.ESNext.
A lot of people in the ecosystem incorrectly define ES modules using export = and so this causes some issues.
The root cause is this usageMode === ModuleKind.ESNext in checker.ts. Removing that expression fixes the issue:
function canHaveSyntheticDefault(file: SourceFile | undefined, moduleSymbol: Symbol, dontResolveAlias: boolean, usage: Expression) {
const usageMode = file && getUsageModeForExpression(usage);
if (file && usageMode !== undefined) {
const result = isESMFormatImportImportingCommonjsFormatFile(usageMode, file.impliedNodeFormat);
if (usageMode === ModuleKind.ESNext || result) {
return result;
}
// fallthrough on cjs usages so we imply defaults for interop'd imports, too
}🔎 Search Terms
allowSyntheticDefaultImports ModuleKind.ESNext
🕗 Version & Regression Information
- 4.9.0-dev.20221026
- main
🙁 Actual behavior
Errors like the following, even though allowSyntheticDefaultImports is true:
Module '"https://esm.sh/v96/@types/sanitize-html@2.6.2/index.d.ts"' can only be default-imported using the 'allowSyntheticDefaultImports' flag
🙂 Expected behavior
No type errors, but maybe it could be argued the error message would improve to not mention the allowSyntheticDefaultImports flag. I would argue for no type errors because of the prevalance of people incorrectly using export = to describe ES modules.
kt3k
Metadata
Metadata
Assignees
Labels
Needs InvestigationThis issue needs a team member to investigate its status.This issue needs a team member to investigate its status.