2016-10-06 34 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

相关问题