怎么做 - 我已尝试过
的组合typings install [googlemaps | google.maps] [--ambient] --save
最终会出现此错误的变体
打字ERR!消息无法找到" googlemaps"为" npm"在注册表中。
根据Amy的建议,我也会下载到相关目录并添加
/// <reference path="main/ambient/google.maps/google.maps.d.ts" />
到我的main.d.ts
(由于我没有收到其他错误而被清楚阅读的文件)。
我无法在网上找到任何回答问题的内容
我的最终目标是摆脱这种错误
错误TS2503:无法找到命名空间&#39; google&#39;。
答案 0 :(得分:70)
因此,这个例外的原因是需要从您的应用包中单独下载地图脚本。它不是典型的npm install
,您可以将.js
和.ts
精心打包以供消费。
TLDR :可以通过npm安装打字,但必须通过<script>
标签下载.js脚本(对于SPA,此标记可以附加到您的网页上 - -fly用于改善应用程序的初始加载时间,这就是我的工作。
我推荐的路径如下:
安装强>
npm install --save @types/googlemaps
导入强>
import {} from 'googlemaps';
加载&amp;使用(此功能可确保地图脚本仅附加到页面一次,以便可以一遍又一遍地调用它)
addMapsScript() {
if (!document.querySelectorAll(`[src="${googleMapsUrl}"]`).length) {
document.body.appendChild(Object.assign(
document.createElement('script'), {
type: 'text/javascript',
src: googleMapsUrl,
onload: () => doMapInitLogic()
}));
} else {
this.doMapInitLogic();
}
}
请记住,必须将地图脚本附加到页面,并且必须先下载脚本,然后才能发生其他任何事情。例如,如果你正在使用Angular,我将addMapsScript()逻辑包装在一个observable中并放入我的地图组件路由解析器。
使用类型(类型定义包括但不限于):
const mapRef: google.maps.Map;
const bounds: google.maps.LatLngBounds;
const latLng: google.maps.LatLng;
摆脱警告:@types/googlemaps/index.d.ts' is not a module.
在名为index.d.ts
的项目根目录中添加一个文件,并插入以下内容:
declare module 'googlemaps';
更新01.06.2018(@DicBrus的调查结果):
为了导入谷歌命名空间并摆脱烦人的错误&#34;找不到命名空间&#39; google&#39;&#34;您应该确保在@types/googlemaps
有两种方法可以做到: 1.三重斜线指令
/// <reference path="<relevant path>/node_modules/@types/googlemaps/index.d.ts" />
工作得很好,但不那么优雅。
可在此处找到文档:https://www.typescriptlang.org/docs/handbook/triple-slash-directives.html
tsconfig.json
,因为导入后您无需再导入其他内容详细手册在此处:https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
您应该检查compilerOptions
下的两个小节:
typeRoots
和types
默认情况下,导入node_modules / @ types下的所有类型定义,除非您准确指定了所需的类型定义。
在我的特定情况下,我有以下部分:
"types": []
它禁止自动包含@types包。
删除此行重新解决了我的问题,同时添加了三重斜杠指令也有帮助。但我选择了第二种解决方案。
至于&#34;空&#34;导入,我没有找到任何解释如何以及为什么它的工作原理。我认为它 NOT 导入任何模块或类,但它确实导入了命名空间。这个解决方案不适合我,因为IDE将此导入标记为&#34;未使用&#34;它可以很容易地删除。例如,webstorm的命令Ctrl + Alt + O - 美化代码并删除所有不必要的导入。
答案 1 :(得分:18)
实际上,我的用例是Angular CLI,我只需要
public class Singleton implements Parcelable {
private String orderId;
private String pickupAddress;
private String contact;
Singleton(String orderId,String pickupAddress,String contact){
this.orderId = orderId;
this.pickupAddress = pickupAddress;
this.contact = contact;
}
protected Singleton(Parcel in) {
orderId = in.readString();
pickupAddress = in.readString();
contact = in.readString();
}
public static final Creator<Singleton> CREATOR = new Creator<Singleton>() {
@Override
public Singleton createFromParcel(Parcel in) {
return new Singleton(in);
}
@Override
public Singleton[] newArray(int size) {
return new Singleton[size];
}
};
public String getOrderId() {
return orderId;
}
public String getPickupAddress() {
return pickupAddress;
}
public String getContact() {
return contact;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(orderId);
dest.writeString(pickupAddress);
dest.writeString(contact);
}
}
答案 2 :(得分:14)
我在离子2项目上测试了这些步骤,它完美无缺:
npm install typings --global
typings install dt~google.maps --global --save
{
"compilerOptions": {
"allowSyntheticDefaultImports": true,
"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": [
"dom",
"es2015"
],
"module": "es2015",
"moduleResolution": "node",
"sourceMap": true,
"target": "es5"
},
"include": [
"src/**/*.ts",
"typings/*.d.ts"
],
"exclude": [
"node_modules"
],
"compileOnSave": false,
"atom": {
"rewriteTsconfig": false
}
}
答案 3 :(得分:11)
typings install google.maps --global
您需要使用--global
(以前为--ambient
)标记来搜索DefinitlyTyped
答案 4 :(得分:10)
截至目前,正确的安装方式是:
typings install dt~google.maps --global [--save]
答案 5 :(得分:8)
截至2年级
npm install --save @types/googlemaps
将类型根添加到您的tsconfig
{
"compilerOptions": {
"typeRoots": ["./node_modules/@types/"]
}
}
答案 6 :(得分:4)
斯蒂芬·保罗(Stephen Paul)清楚地解释了一切,但有一些重要的事情要提。 tsconfig可以互相扩展。而扩展一则可以覆盖父一。就我而言,我在应用程序目录下有另一个tsconfig.app.json,其中
types: []
数组。正如Stephen所解释的,此空数组将覆盖typeRoots。因此,只需删除所有相关tsconfig文件中的所有类型数组,并确保
"typeRoots": ["node_modules/@types"]
存在。 不用说必须安装@ types @ googlemaps
答案 7 :(得分:4)
我的解决方案(适用于Vue2.x):
安装
npm install --save @types/googlemaps
将脚本添加到index.html
<script src="https://maps.googleapis.com/maps/api/js?key=XXX&libraries=YYYY"></script>
在根文件夹类型/index.d.ts中创建
在此处添加下一行:
/// <reference path="../node_modules/@types/googlemaps/index.d.ts" />
declare module 'googlemaps';
打开tsconfig.json并将“类型/*.d.ts”添加到“包含”数组中。
"include": [
"src/**/*.ts",
"src/**/*.tsx",
"src/**/*.vue",
"tests/**/*.ts",
"tests/**/*.tsx",
"types/**/*.d.ts"
],
答案 8 :(得分:2)
我努力在窗口上定义google对象,最后通过扩展Window
接口找到了一个好方法。
只需创建一个google-maps.d.ts
文件,
import '@types/googlemaps';
declare global {
interface Window {
google: typeof google;
}
}
并将其添加到您的 root 文件夹中名为types
的目录中。
然后指向您的tsconfig.json
文件中的此文件夹。
// tsconfig.json
compilerOptions: {
...
"typeRoots": [
"node_modules/@types",
"types"
],
...
}
答案 9 :(得分:2)
对于Angular9 +的用户,我强烈建议使用其官方组件
第1步:安装:
df.groupby('A').agg({'B':'sum', 'C':'mean'}).round(2)
第2步:注册
npm install --save-dev @angular/google-maps
第3步:实施
@NgModule({
imports: [
GoogleMapsModule
]
})
export class AppModule { }
<google-map [center]="center" [options]="options"></google-map>
请参阅https://medium.com/angular-in-depth/google-maps-is-now-an-angular-component-821ec61d2a0,以获取更详细的指南
答案 10 :(得分:1)
最简单的方法是使用 triple-slash directive 。幸运的是,还有一种可用的语法可以利用标准软件包的解析度:
/// <reference types="googlemaps" />
答案 11 :(得分:0)
如果在预览时遇到错误消息Cannot find namespace ‘google’
,则需要做两件事。
安装Google Map插件
npm install @google/maps
只需将Google地图导入到app.component.ts
文件
import { google } from '@google/maps';
答案 12 :(得分:0)
好吧,我已经在我的 angular 11 项目中尝试了上述所有方法但没有成功,最后 official typing from google 解决了我的问题:
npm install --save @types/google.maps
答案 13 :(得分:-1)
新的 @ types / google__maps 非常适合我们。原始的( @ types / googlemaps )棘手,并且具有许多浏览器依赖项(例如HTMLElement
),如果您在nodejs环境中使用TS,则会无法编译TS。
npm install @ types / google__maps -D
因此,在 DefinitelyTyped 中有 googlemaps , google-maps 和 google__maps 。区别说明如下: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/29625#issuecomment-429207839