Używam maszynopisu 1.6 ze składnią modułów es6.
Moje pliki to:
test.ts:
module App {
export class SomeClass {
getName(): string {
return 'name';
}
}
}
main.ts:
import App from './test';
var a = new App.SomeClass();
Kiedy próbuję skompilować main.ts
plik, pojawia się ten błąd:
Błąd TS2306: Plik „test.ts” nie jest modułem.
Jak mogę to osiągnąć?
javascript
typescript
ecmascript-6
Bazinga
źródło
źródło
Odpowiedzi:
Rozszerzony - aby podać więcej szczegółów na podstawie niektórych komentarzy
Błąd
Wynika z faktu opisanego tutaj http://exploringjs.com/es6/ch_modules.html
W związku z powyższym potrzebujemy
export
, jako części pliku test.js. Dostosujmy jego zawartość w ten sposób:A teraz możemy go zaimportować na trzy sposoby:
I możemy konsumować importowane rzeczy, takie jak ten:
i wywołaj metodę, aby zobaczyć ją w akcji:
Oryginalna część stara się pomóc zmniejszyć stopień złożoności wykorzystania przestrzeni nazw
Część oryginalna:
Naprawdę gorąco sugerowałbym sprawdzenie tego pytania i odpowiedzi:
Jak używać przestrzeni nazw z zewnętrznymi modułami TypeScript?
Przytoczę pierwsze zdanie:
W tym przypadku po prostu nie potrzebujemy
module
wewnątrztest.ts
. Może to być dostosowana treśćtest.ts
:Przeczytaj więcej tutaj
Export =
możemy to później konsumować w ten sposób:
Przeczytaj więcej tutaj:
Opcjonalne ładowanie modułów i inne zaawansowane scenariusze ładowania
źródło
Powyższe odpowiedzi są prawidłowe. Ale na wszelki wypadek ... Mam ten sam błąd w VS Code. Musiałem ponownie zapisać / ponownie skompilować plik, który generował błąd.
źródło
Jak mogę to osiągnąć?
Twój przykład deklaruje moduł wewnętrzny TypeScript <1.5 , który jest teraz nazywany przestrzenią nazw . Stara
module App {}
składnia jest teraz odpowiednikiemnamespace App {}
. W rezultacie działa:Biorąc to pod uwagę ...
Staraj się unikać eksportowania przestrzeni nazw i zamiast tego eksportuj moduły (wcześniej nazywane zewnętrznymi ). W razie potrzeby możesz użyć przestrzeni nazw podczas importu z wzorcem importu przestrzeni nazw w następujący sposób:
źródło
Oprócz odpowiedzi A.Tima są chwile, kiedy nawet to nie działa, więc musisz:
źródło
export class... {
, co nie podobało się angularowi , dając mi ten problem. Po naprawieniu formatowania skompilowany bez problemu.Oprócz odpowiedzi Tima ten problem wystąpił u mnie, gdy dzieliłem refaktoryzację pliku, dzieląc go na własne pliki.
VSCode z jakiegoś powodu wprowadził wcięcie do części mojego kodu [klasy], co spowodowało ten problem. Na początku było to trudne do zauważenia, ale kiedy zdałem sobie sprawę, że w kodzie są wcięcia, sformatowałem kod i problem zniknął.
na przykład wszystko po pierwszym wierszu definicji klasy było automatycznie wcięte podczas wklejania.
źródło