@ types / googlemaps / index.d.ts'不是一个模块


69

我想在Angular项目中使用Google Maps API,因此我使用了以下两个命令来安装npm软件包:

npm install @agm/core --save-dev
npm install @types/googlemaps --save-dev

我将此行添加到我的组件中:

import {} from "@types/googlemaps";

但是我在VS Code中看到了这两个错误:

[ts] File 'h:/Angular Projects/Breakfast/client/breakfast/node_modules/@types/googlemaps/index.d.ts' is not a module.
[ts] Cannot import type declaration files. Consider importing 'googlemaps' instead of '@types/googlemaps'.

我添加了这些行

"types": ["googlemaps"]
"moduleResolution": "node"

到tsconfig.json和tsconfig.spec.json,但仍然没有运气。在Chrome开发者工具上,我看到以下错误:

Error: Uncaught (in promise): TypeError: Cannot read property 'Autocomplete' of undefined
TypeError: Cannot read property 'Autocomplete' of undefined

Angular版本6打字稿版本2.9.2

我也尝试过Angular 5。


2
请选择正确的答案之一。
rmcsharry

2
检查这个例子角7谷歌地图freakyjolly.com/...
代码间谍

2
谢谢@CodeSpy。您的FreakyJolly的例子很完美....节省了我很多时间!
乌斯塔德,

Answers:


128

感谢此文档链接:https : //www.typescriptlang.org/docs/handbook/triple-slash-directives.html

[Angular 6+]您只需要在Typescript文件的开头(即第1行,之前没有任何内容)添加此行:

/// <reference types="@types/googlemaps" />

[Angular 5-]您只需要在Typescript文件导入中的任何位置添加以下行:

import {} from "googlemaps";

由于以下答案,您可能还需要添加一个<root>/index.d.ts包含的文件(尽管在我的情况下不需要):

declare module 'googlemaps';

3
我应该在哪里添加这一行?在我的组件ts文件中?或html文件?
AMendis

20
三斜杠有效,但是为什么正常的import语句不起作用?正是这种胡扯使Angular痛苦地工作。
史蒂芬·霍夫

4
什么?为什么这项工作?有没有搞错?嗯...谢谢
WebWanderer

2
TS文档说,“ Angular 6+”选项可能不是一个好主意:-仅当您手动编写d.ts文件时才使用这些指令。-因此,不应在“ .ts”文件,只有“ d.ts”文件。
guillefd

1
对于[Angular 6+],它仅适用于在我的Typescript文件的开头添加:/// <参考类型=“ @ types / googlemaps” />(添加了“ @ types /”)。
Florian D.

33

导入可以简化如下:

import {} from "googlemaps";

在项目的根目录下创建一个名为的文件,index.d.ts并粘贴以下内容:

declare module 'googlemaps';

创建的文件需要位于src文件夹中的目录中

我发现这篇文章是关于该文件的用途的

https://www.bennadel.com/blog/3169-adding-custom-typings-files-d-ts-in-an-angular-2-typescript-application.htm


刚尝试过这种方法(在Vue.js上)项目,它就起作用了,请记住我的情况,我需要将此hack放置在src/tsconfig之下的文件夹下
Val Redchenko

这在Angular 6上对我有用-两者都需要。我认为这应该是建议的答案。
rmcsharry

在Angular 8中工作
Andrey Gubal

在Angular 9上得到确认,这是人们选择的答案。
MDMoore313 '20

这正在工作。在我以前的项目angular 5上遇到了一个错误。完美运行
LVW23 '20

11

工作正常

npm install --save-dev @types/googlemaps
At the beggining of your component file, type:
/// <reference types="@types/googlemaps" />

11

在我的Angular 7+项目中

$ npm install @types/googlemaps --save-dev
在tsconfig.app.json中

"types": [
      "googlemaps"
]

感谢您下面的链接 https://www.freakyjolly.com/angular-7-6-add-google-maps-in-angular-2-plus-applications-using-angular-google-maps-module-agm-core -easily /#more-2316


在所有解决方案中,此解决方案都对我有用。
LegendaryAks

这个解决方案在Angular 8上对我有用。非常感谢!github.com/DefinitelyTyped/DefinitelyTyped/issues/37932
Jaimin Patel

10

我刚刚在src文件夹中创建了index.d.ts并添加了

声明模块“ googlemaps”;

它解决了问题


7

对我来说,在Angular 6中,当我使用

/// <reference types="@types/googlemaps" />

4

在我的6+角项目中,我已经解决了在打字稿文件顶部声明googlemaps命名空间的问题,并带有以下内容:

/// <reference path="../../../../../../node_modules/@types/googlemaps/index.d.ts"/>

完成此操作后,您一定不能以其他方式导入googlemaps,然后它才能工作。使用正确的路径到您的node_modules文件夹。

有关Typescript中名称空间用法的更多信息和参考,请参见文档


3
使用Angular 7.2,这就是本页成功列出的解决方案。在尝试附加index.d.ts'types目录没有成功,也不是进口{}等
杰米·爱

1
我刚刚从Angular 7升级到8到9,并遇到了同样的问题。@ bertonc96的答案是解决我问题的唯一解决方案,杰米·洛夫(Jamie Love)的评论很有帮助,因为它可以将事情放在正确的上下文中(即,尝试使用此解决方案而没有其他答案中提供的任何其他建议)。我唯一要澄清的是,包含上面代码的打字稿文件是您使用googlemaps API的组件文件。就我而言,我在指令中使用它。
coder101 '20

1

您可以通过以下方式避免此错误:

安装后

npm install @ types / googlemaps --save-dev

转到src / tsconfig.app.json并添加下一行:

"compilerOptions": {
    ...,
    "types": [
         "googlemaps"
    ],
    ...,
},

1

它不在根上。您只需要在此文件上添加以下代码: node_modules/@types/googlemaps/index.d.ts

declare module 'googlemaps';

由于版本控制,我们无法更新依赖关系,因此这不是解决方案
Med Dhaker Abdeljawed

-1
    import { MapsAPILoader } from '@agm/core';
    declare var google;
    
    
     constructor(private mapsAPILoader: MapsAPILoader) {
         this.mapsAPILoader.load().then(() => {
              var mapProp = {
                center: new google.maps.LatLng(9.93040049002793, -84.09062837772197),
                zoom: 15,
                mapTypeId: google.maps.MapTypeId.ROADMAP
              };
              this.map = new google.maps.Map(this.gmapElement.nativeElement, mapProp);
            });
        
          }
    
    //Hope it helps

虽然此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。-来自评论
Akif
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.