使用namespace作为typescript中的类型

sod*_*sod 20 typescript

我已经为谷歌地图安装了类型定义,声明了这样的命名空间:

namespace google.maps {
  export class Map {
    // ...
  }

  // ...
}
Run Code Online (Sandbox Code Playgroud)

因此,如果我只是在全球范围内使用它,它的工作效果很好

const map = new google.maps.Map();
Run Code Online (Sandbox Code Playgroud)

对于单元测试,我不想全局访问API,而是注入它.但似乎我无法从类型中输入变量google.map

所以这不起作用:

function mapFactory(api: google.maps) {
    return new api.Map();
}
Run Code Online (Sandbox Code Playgroud)

任何解决方案如何使用命名空间作为类型?

Nit*_*mer 36

尝试:

function mapFactory(api: typeof google.maps) {
    return new api.Map();
}
Run Code Online (Sandbox Code Playgroud)

  • 您能否解释一下它的工作原理或参考文档?我没有在文档中看到它,也不明白为什么“typeof”可以与名称空间一起使用。 (2认同)
  • @Sergey 这里有一些相关内容:[可选模块加载和其他高级加载场景](https://www.typescriptlang.org/docs/handbook/modules.html#optional-module-loading-and-other-advanced- load-scenarios): “为了维护类型安全,我们可以使用 typeof 关键字。typeof 关键字在类型位置使用时,会生成值的类型,在本例中为模块的类型” (2认同)