找不到名称 'google' angular 8
Cannot find name 'google' angular 8
因为它在构建过程中显示错误。
ERROR in app/pages/TestPage4/TestPage4.ts:27:27 - error TS2304: Cannot find name 'google'.
27 this.geoCoder = new google.maps.Geocoder;
~~~~~~
app/pages/TestPage4/TestPage4.ts:29:32 - error TS2304: Cannot find name 'google'.
29 const autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement);
~~~~~~
app/pages/TestPage4/TestPage4.ts:33:24 - error TS2503: Cannot find namespace 'google'.
33 const place: google.maps.places.PlaceResult = autocomplete.getPlace();
~~~~~~
下面是我的代码。
import { Component, OnInit, ElementRef, ViewChild, NgZone } from '@angular/core';
import { MapsAPILoader } from '@agm/core';
@Component({
selector: 'app',
templateUrl: './TestPage4.html',
styleUrls: ['./TestPage4.css']
})
export class TestPage4 implements OnInit {
lat: number;
lng: number;
zoom = 1;
private geoCoder;
@ViewChild('search', { static: false})
public searchElementRef: ElementRef;
constructor(
private mapsAPILoader: MapsAPILoader,
private ngZone: NgZone) {}
ngOnInit() {
//load Places Autocomplete
this.mapsAPILoader.load().then(() => {
this.geoCoder = new google.maps.Geocoder;
const autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement);
autocomplete.addListener("place_changed", () => {
this.ngZone.run(() => {
//get the place result
const place: google.maps.places.PlaceResult = autocomplete.getPlace();
console.log(place);
//verify result
if (place.geometry === undefined || place.geometry === null) {
return;
}
for (var i = 0; i < place.address_components.length; i++) {
let addressType = place.address_components[i].types[0];
//if (componentForm[addressType]) {
// var val = place.address_components[i][componentForm[addressType]];
// document.getElementById(addressType).value = val;
//}
// for the country, get the country code (the "short name") also
console.log(addressType);
if (addressType == "country") {
console.log(place.address_components[i].short_name);
console.log(place.address_components[i].long_name);
}
else{
console.log('---others---');
console.log(place.address_components[i].short_name);
console.log(place.address_components[i].long_name);
}
}
//set latitude, longitude and zoom
this.lat = place.geometry.location.lat();
this.lng = place.geometry.location.lng();
this.zoom = 12;
});
});
});
}
}
因为我 F12 它 new google.maps.Geocoder
并告诉我它存在于下面。
但是实际上当built它显示上面的错误。
更新 1:
{
"compileOnSave": false,
"compilerOptions": {
"downlevelIteration": true,
"importHelpers": true,
"module": "esnext",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2017",
"dom"
],
"baseUrl": "src",
"paths": { "@angular/*": ["node_modules/@angular/*"] }
}
}
这是 tsconfig.json 文件。
更新二:
使用 declare var google: any;
适用于
this.geoCoder = new google.maps.Geocoder;
和
const autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement);
但在 google.maps.places.PlaceResult 上失败 找不到名称空间 'google' const place: google.maps.places.PlaceResult = autocomplete.getPlace();
在 tsconfig.app.json.
中找到了解决方案
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"baseUrl": "./",
"types": ["googlemaps"]
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
仅在缺少的 types 中添加了 "googlemaps"
,错误消失了。无需添加 declare var google: any;
没有它也能很好地工作。
因为它在构建过程中显示错误。
ERROR in app/pages/TestPage4/TestPage4.ts:27:27 - error TS2304: Cannot find name 'google'.27 this.geoCoder = new google.maps.Geocoder; ~~~~~~ app/pages/TestPage4/TestPage4.ts:29:32 - error TS2304: Cannot find name 'google'.
29 const autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement); ~~~~~~ app/pages/TestPage4/TestPage4.ts:33:24 - error TS2503: Cannot find namespace 'google'.
33 const place: google.maps.places.PlaceResult = autocomplete.getPlace(); ~~~~~~
下面是我的代码。
import { Component, OnInit, ElementRef, ViewChild, NgZone } from '@angular/core';
import { MapsAPILoader } from '@agm/core';
@Component({
selector: 'app',
templateUrl: './TestPage4.html',
styleUrls: ['./TestPage4.css']
})
export class TestPage4 implements OnInit {
lat: number;
lng: number;
zoom = 1;
private geoCoder;
@ViewChild('search', { static: false})
public searchElementRef: ElementRef;
constructor(
private mapsAPILoader: MapsAPILoader,
private ngZone: NgZone) {}
ngOnInit() {
//load Places Autocomplete
this.mapsAPILoader.load().then(() => {
this.geoCoder = new google.maps.Geocoder;
const autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement);
autocomplete.addListener("place_changed", () => {
this.ngZone.run(() => {
//get the place result
const place: google.maps.places.PlaceResult = autocomplete.getPlace();
console.log(place);
//verify result
if (place.geometry === undefined || place.geometry === null) {
return;
}
for (var i = 0; i < place.address_components.length; i++) {
let addressType = place.address_components[i].types[0];
//if (componentForm[addressType]) {
// var val = place.address_components[i][componentForm[addressType]];
// document.getElementById(addressType).value = val;
//}
// for the country, get the country code (the "short name") also
console.log(addressType);
if (addressType == "country") {
console.log(place.address_components[i].short_name);
console.log(place.address_components[i].long_name);
}
else{
console.log('---others---');
console.log(place.address_components[i].short_name);
console.log(place.address_components[i].long_name);
}
}
//set latitude, longitude and zoom
this.lat = place.geometry.location.lat();
this.lng = place.geometry.location.lng();
this.zoom = 12;
});
});
});
}
}
因为我 F12 它 new google.maps.Geocoder
并告诉我它存在于下面。
更新 1:
{
"compileOnSave": false,
"compilerOptions": {
"downlevelIteration": true,
"importHelpers": true,
"module": "esnext",
"outDir": "./dist/out-tsc",
"sourceMap": true,
"declaration": false,
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es5",
"typeRoots": [
"node_modules/@types"
],
"lib": [
"es2017",
"dom"
],
"baseUrl": "src",
"paths": { "@angular/*": ["node_modules/@angular/*"] }
}
}
这是 tsconfig.json 文件。
更新二:
使用 declare var google: any;
适用于
this.geoCoder = new google.maps.Geocoder;
和
const autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement);
但在 google.maps.places.PlaceResult 上失败 找不到名称空间 'google' const place: google.maps.places.PlaceResult = autocomplete.getPlace();
在 tsconfig.app.json.
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"baseUrl": "./",
"types": ["googlemaps"]
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
仅在缺少的 types 中添加了 "googlemaps"
,错误消失了。无需添加 declare var google: any;
没有它也能很好地工作。