Google Maps
Sat Nov 07 2020 22:27:26 GMT+0000 (UTC)
Saved by @narro #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