打字稿中的相对名称空间?

时间:2016-10-06 11:54:30

标签: javascript typescript namespaces

打字稿中的名称空间是相对的吗?当我尝试以下代码时。

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();

我收到错误消息" Property''在' typeof b'类型中不存在。"

有没有办法说明打字稿' b'是"当前"的根源而不是孩子。命名空间?

THX

1 个答案:

答案 0 :(得分: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