2016-10-06 39 views
0

命名空間是否與打字稿相對?當我嘗試下面的代碼。打字稿中的相對命名空間?

namespace a.b.c { 
    export function sayHello() { 
    b.g.h.sayHello(); 
    } 
} 

namespace b.g.h { 
    export function sayHello() { 
    console.log("Hello"); 
    } 
} 

a.b.c.sayHello(); 

我得到一個錯誤,「屬性'g'類型'typeof b'上不存在。」

有沒有辦法說打字機'B'是根,而不是「當前」命名空間的孩子?

THX

回答

0

你不能這樣做,因爲內部a時,訪問b會給你什麼是當前範圍,這就是a.b
爲你做到這一點的唯一方法是從窗口對象訪問根b

namespace a.b.c { 
    export function sayHello() { 
     window.b.g.h.sayHello(); 
    } 
} 

但你還需要定義添加到窗口對象:

interface Window { 
    b: { 
     g: { 
      h: { 
       sayHello(): void; 
      } 
     } 
    } 
} 

code in playground

另一種選擇是在另一個的名稱空間包b

namespace a.b.c { 
    export function sayHello() { 
     wrapper.b.g.h.sayHello(); 
    } 
} 

namespace wrapper.b.g.h { 
    export function sayHello() { 
     console.log("Hello"); 
    } 
} 

code in playground

相關問題