TS2307 — DedSec Project
TS2307 — η εύρεση module δεν είναι ίδια με την εκτέλεση Αρχική αιτία Το TS2307 σημαίνει ότι ο compiler δεν μπορεί να εντοπίσει module ή τις αντίστοιχες δηλώσεις τύπων με τους ισχύοντες…
TS2307 — η εύρεση module δεν είναι ίδια με την εκτέλεση
Αρχική αιτία
Το TS2307 σημαίνει ότι ο compiler δεν μπορεί να εντοπίσει module ή τις αντίστοιχες δηλώσεις τύπων με τους ισχύοντες κανόνες. Πιθανές αιτίες είναι λάθος σχετική διαδρομή, κεφαλαία/πεζά, απουσία πακέτου, ασυμβατό ESM/CommonJS, alias χωρίς σωστή ρύθμιση ή ελλείπουσες δηλώσεις τύπων. Ένα κενό d.ts που δηλώνει τα πάντα any μπορεί να κρύψει τον έλεγχο, αλλά δεν προσθέτει τον πραγματικό κώδικα που λείπει.
Πρακτική διόρθωση
Για σύγχρονο Node ESM χρησιμοποίησε module και moduleResolution NodeNext, package.json με type module και σχετική εισαγωγή TypeScript που αναφέρει το τελικό επίθημα .js. Το αρχείο math.ts εντοπίζεται από τη διαδρομή ./math.js και μεταγλωττίζεται σε dist/math.js, ώστε ο Node να μπορεί να το φορτώσει κανονικά. Δεν χρειάζονται εξωτερικά πακέτα.
Επαληθευμένο παράδειγμα TypeScript
Πρόκειται για δύο ξεχωριστά αρχεία:
// math.ts
export function sum(a: number, b: number): number { return a + b; }
// main.ts (separate file)
import {sum} from './math.js';
if (sum(2, 3) !== 5) throw Error();
console.log('PASS TS2307');
Γιατί λειτουργεί
Το παράδειγμα περιλαμβάνει δύο ξεχωριστά αρχεία .ts, όχι μία κοινή πηγή με export και import. Το tsconfig.json πρέπει να δηλώνει strict:true, target ES2022, outDir dist και να συμπεριλαμβάνει και τα δύο αρχεία. Στην έξοδο ο Node χρησιμοποιεί το πραγματικό .js αρχείο χωρίς πρόσθετο loader. Άλλα περιβάλλοντα μπορεί να έχουν διαφορετικούς κανόνες.
Εντολές ελέγχου
Δημιούργησε package.json με {"private":true,"type":"module"} και tsconfig.json με {"compilerOptions":{"target":"ES2022","module":"NodeNext","moduleResolution":"NodeNext","strict":true,"outDir":"dist"},"include":["main.ts","math.ts"]}. Εκτέλεσε tsc -p tsconfig.json && node dist/main.js: αναμένεται PASS. Για σκόπιμο TS2307 άλλαξε προσωρινά την εισαγωγή σε ./missing.js και τρέξε tsc --noEmit -p tsconfig.json.
Ασκήσεις διάγνωσης
Έλεγξε διάκριση πεζών/κεφαλαίων σε Linux σε σύγκριση με άλλο σύστημα. Εκτέλεσε tsc --traceResolution -p tsconfig.json και βρες ποιες διαδρομές δοκιμάστηκαν. Μία διαδρομή paths alias στο tsconfig δεν μαθαίνεται αυτόματα στον Node: πρέπει να υπάρχει bundler, loader ή συμβατή τελική διαδρομή.
Τεκμηρίωση: https://www.typescriptlang.org/docs/handbook/modules/reference.html