Google Maps
Sat Nov 07 2020 22:27:26 GMT+0000 (Coordinated Universal Time)
Saved by @robertjbass #typescript #googlemaps
import { User } from './User'
import { Company } from './Company'
// Instructions to every other class on how they can be an argument to 'addMarker'
// Interface acts as a gatekeeper for props. Does the prop qualify? If so, it can be an argument to the function
interface Mappable {
location: {
lat: number;
lng: number;
}
}
export class CustomMap {
private googleMap: google.maps.Map;
constructor(divId: string) {
this.googleMap = new google.maps.Map(document.getElementById(divId), {
zoom: 1,
center: {
lat: 0,
lng: 0
}
})
}
// TS will compare User and Company types and only allow mutual props to be referenced in this function
addMarker(mappable: Mappable): void {
// typing 'mappable.' will use intellisense to show props that can be mapped here
new google.maps.Marker({
map: this.googleMap,
position: {
lat: mappable.location.lat,
lng: mappable.location.lng
}
})
}
}
// Company and User will be included below for reference
// Company.ts
import faker from 'faker'
export class Company {
companyName: string;
catchPhrase: string;
location: {
lat: number;
lng: number;
}
constructor() {
this.companyName = faker.company.companyName()
this.catchPhrase = faker.company.catchPhrase()
this.location = {
lat: parseFloat(faker.address.latitude()),
lng: parseFloat(faker.address.longitude())
}
}
}
// User.ts
import faker from 'faker'
// 'export' will export specific variables - imports will be done in curly braces
// 'export default' should nearly never be used in TypeScript - importing default exports won't use curly braces
export class User {
name: string;
location: {
lat: number;
lng: number;
}
// Objects aren't defined when the class is created so you can not assign values to keys without instantiating the object first
constructor() {
this.name = faker.name.firstName()
this.location = {
lat: parseFloat(faker.address.longitude()),
lng: parseFloat(faker.address.latitude())
}
}
}
// Execution - index files:
// index.ts
import faker from 'faker'
// 'export' will export specific variables - imports will be done in curly braces
// 'export default' should nearly never be used in TypeScript - importing default exports won't use curly braces
export class User {
name: string;
location: {
lat: number;
lng: number;
}
// Objects aren't defined when the class is created so you can not assign values to keys without instantiating the object first
constructor() {
this.name = faker.name.firstName()
this.location = {
lat: parseFloat(faker.address.longitude()),
lng: parseFloat(faker.address.latitude())
}
}
}
// index.html
// the 'DOCTYPE' heading will cause Google Maps to fail, not sure why
<!-- <!DOCTYPE html> -->
<html>
<head charset="utf-8">
<title>Maps</title>
</head>
<body>
<div id="map" style="height: 100%"></div>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBNLrJhOMz6idD05pzfn5lhA-TAw-mAZCU"></script>
<script src="./src/index.ts"></script>
</body>
</html>
Google Map app for adding markers based on Latitude and Longitude. The faker.js library is included to populate fake user and company data.



Comments