microsoft / microsoft/TypeScript
ES6 module declarations should be marked to exclude them from `allowSyntheticDefaultImports`
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
This is the restated #27293. CC @ryanelian
TypeScript Version: master (471bc64)
Search Terms: esModuleInterop allowSyntheticDefaultImports error undefined default import export
Code: In the b subdirectory, compile with tsc -b . and run with node index.js.
// tsconfig.common.json
{
"compilerOptions": {
"composite": true,
"declaration": true,
"target": "es6",
"module": "commonjs",
"esModuleInterop": true
}
}
// a/tsconfig.json
{
"extends": "../tsconfig.common.json",
"files": [
"index.ts"
]
}
// a/index.ts
export const foo = 42;
// b/tsconfig.json
{
"extends": "../tsconfig.common.json",
"references": [
{ "path": "../a" }
],
"files": [
"index.ts"
]
}
// b/index.ts
// Actual: compile OK. Expected: compile error.
import A from "../a";
// Actual: runtime error.
console.log(A.foo);
Expected behavior: The generated a/index.d.ts uses some new syntax to mark the module as an ES6 module, so allowSyntheticDefaultImports does not apply to it and the default import in b/index.ts is a compile error.
Actual behavior: allowSyntheticDefaultImports applies to module a, so at compile time, the default import is accepted and resolves to the entire module, but at runtime, A.foo raises an error:
REDACTED/b/index.js:7
console.log(a_1.default.foo);
^
TypeError: Cannot read property 'foo' of undefined
Playground Link: N/A, multiple files
Related Issues: #27293
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Reproduziere den Fall im Unterverzeichnis b mit tsc -b . und node index.js und untersuche anschließend die generierte a/index.d.ts sowie den Import in b/index.ts. Als erledigt gilt die Aufgabe, wenn die Deklaration das ES6-Modul kennzeichnet, sodass der default import während der Kompilierung abgelehnt wird, anstatt den gezeigten Laufzeitfehler zu verursachen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- node.js, typescript
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100