运行ng serve时未定义命名空间声明,但是intellisense确实将其提取

时间:2018-12-27 16:21:21

标签: angular typescript angular-cli typescript-typings

我正在使用Azure Atlas库,并决定为第三方库进行自己的输入。我已经在项目结构中定义了一个打字文件atlas.d.ts,VS Code中的intellisense确实可以接收并允许我使用打字。问题是,运行ng serve时出现错误:

  

ReferenceError:未定义图集

在键入中,我只是这样声明了一个命名空间:

declare namespace atlas {
    // ... Rest of the the interfaces and classes here
}

问题是我已经阅读了有关实现全局namespaces or modules in typescript的所有文档,并通读了一些堆栈溢出帖子,并修改了tsconfig以考虑到atlas.d.ts文件,即使开箱即用的Angular-CLI ts配置将已经包含所有键入文件,但没有运气。

关于什么可能导致ng serve不考虑输入的想法?您可以找到我正在使用的仓库here

1 个答案:

答案 0 :(得分:0)

所以我解决了这个问题。我不知道为什么这行得通,但确实行得通。设置项目的方式是,仅当需要渲染Atlas Map时,我才会将依赖项资源延迟加载到项目中。根据Azure Atlas文档here。我需要在该项目的index.html文件的标题中具有Azure Maps脚本和样式表,这是我在需要地图时要动态进行的操作。但是为了使命名空间正常工作,我将这两行手动添加到了项目根目录下的index.html文件的HEAD中,现在可以识别出我定义的图集命名空间。

<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/css/atlas.min.css?api-version=1" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/js/atlas.min.js?api-version=1"></script>

如果有人可以向我介绍为什么会这样?我真的很感兴趣,为什么在我自己定义的名称空间上翻转angular,并且直到我添加了将要为其输入类型的库(即使现在还不需要它们)时才意识到它。