首页 > 解决方案 > 运行 ng serve 时未定义命名空间声明,但智能感知确实选择了它

问题描述

我正在使用 Azure Atlas 库,并决定为第三方库制作自己的类型。我已经atlas.d.ts在项目结构中定义了一个类型文件,VS Code 中的智能感知确实会拾取并允许我使用类型。问题是,在运行时ng serve,我收到一个错误:

ReferenceError:未定义图集

在类型中,我简单地声明了一个命名空间:

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

问题是我已经阅读了关于在 typescript 中实现全局命名空间或模块的所有文档,并阅读了几个堆栈溢出帖子,修改了tsconfig以考虑atlas.d.ts文件,即使 Angular-CLI ts 配置不在框将已经包含所有类型文件,但没有运气。

关于什么可能导致ng serve不考虑打字的任何想法?你可以在这里找到我正在使用的 repo

标签: angulartypescriptangular-clitypescript-typings

解决方案


所以我解决了这个问题。我不确定为什么会这样,但确实如此。我设置项目的方式是,只有在需要渲染 Atlas Map 时,我才会将依赖资源延迟加载到项目中。根据此处的 Azure Atlas 文档。我需要在项目的 index.html 文件的头部包含 Azure Maps 脚本和样式表,这是我在需要地图时要动态执行的操作。但是为了让命名空间正常工作,我手动将这两行添加到项目根目录的 index.html 文件的 HEAD 中,现在我定义的 atlas 命名空间已被识别。

<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 会在我自己定义的命名空间上翻转并且直到我添加了要注册类型的库之后才会识别它,即使它们还没有被需要。


推荐阅读