2012-11-26 17 views
5

Próbując połączyć przyjazny dla AMD szkielet aplikacji, natknąłem się na przeszkodę: nie mogę zejść z mojej obecnej ścieżki zaimportować moduł do innego katalogu. mogę importować moduły, które są powyżej, ale poniżej zgłasza błąd:Import modułu TypeScript znajdujący się w ścieżce niższej od aktualnej ścieżki powoduje błąd zakresu

TypeScript Error: The name ''../core/View'' does not exist in the current scope

Tutaj jest struktura mojego (bardzo podstawowy) APP:

app/ 
- core/ 
    - View.ts 
- views/ 
    - HomeView.ts 
- Application.ts 

W moim pliku Application.ts, mogę zaimportować moduł tak:

import HomeView = module('views/HomeView'); 

export class Application { 
    constructor() { 
     console.log('initializing Application'); 
    } 
} 

, który po użyciu --module AMD flagę, poprawnie wyświetla

define(["require", "exports", 'views/HomeView'], function(require, exports, __HomeView__) { 
    var HomeView = __HomeView__; 

    var Application = (function() { 
     function Application() { 
      console.log('initializing Application', HomeView); 
     } 
     return Application; 
    })(); 
    exports.Application = Application;  
}) 

Teraz problem jest kiedy wskoczyć views/HomeView.js i próbować importować moje core/View klasy bazowej przedłużyć od:

import View = module('../core/View'); 

export class HomeView { 
    constructor() { 
     console.log('Hello HomeView!'); 
    } 
} 

Która zgłasza to kompletny błąd:

TypeScript Error: The name ''../core/View'' does not exist in the current scope 
File: test/src/app/views/HomeView.ts 
Start: 21, Length: 14 

Line: import View = module('../core/View'); 
---------------------------^^^^^^^^^^^^^^-- 

Czy to błąd w kompilatorze, czy moje rozumienie importu modułów jest błędne? Dlaczego mógłbym importować views/HomeView, ale nie ../core/View?

Każda pomoc zostanie bardzo doceniona.

Odpowiedz

5

Udało mi się uruchomić to za pomocą ścieżki głównej - chociaż nie mogę ci powiedzieć, dlaczego twoja relatywna ścieżka nie działa.

import view = module("./app/core/View"); 
+6

Użyłem prawie tego samego rozwiązania. Ścieżki są zawsze względem klasy głównej (to znaczy klasy, która ładowała pierwszy moduł), więc View.ts zawsze można uzyskać przez 'moduł (" core/View ")' – JcFx

+0

+1 dla tych informacji - dziękuję! – Fenton

+0

Wow --- czasami tęsknisz za najbardziej oczywistymi rzeczami :) – cnp