【问题标题】:Relative namespaces in typescript?打字稿中的相对名称空间?
【发布时间】:2017-02-15 03:49:10
【问题描述】:

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

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

我收到一条错误消息,指出“类型 'typeof b' 上不存在属性 'g'。”

有没有办法说 typescript 'b' 是根而不是“当前”命名空间的子?

谢谢

【问题讨论】:

    标签: javascript typescript namespaces


    【解决方案1】:

    您不能这样做,因为当在 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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 2019-10-13
      • 2020-05-28
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      相关资源
      最近更新 更多