TypeScript là một tập hợp siêu kiểu của JavaScript, biên dịch thành JavaScript thuần tuý. Mã mẫu dưới đây minh hoạ cách sử dụng đơn giản Google Maps bằng TypeScript:
TypeScript
async function init(): Promise<void> { // Import the needed libraries. await google.maps.importLibrary('maps'); // Access the map. const mapElement = document.querySelector('gmp-map')!; // Access the underlying map object. const innerMap = mapElement.innerMap; console.log({ mapElement, innerMap }); } void init();
JavaScript
async function init() { // Import the needed libraries. await google.maps.importLibrary('maps'); // Access the map. const mapElement = document.querySelector('gmp-map'); // Access the underlying map object. const innerMap = mapElement.innerMap; console.log({ mapElement, innerMap }); } void init();
CSS
/* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; }
HTML
<html>
<head>
<title>Simple Map</title>
<link rel="stylesheet" type="text/css" href="./style.css" />
<script type="module" src="./index.js"></script>
<script>
// prettier-ignore
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
key: "GOOGLE_MAPS_API_KEY"
});
</script>
</head>
<body>
<gmp-map center="-34.397,150.644" zoom="8" map-id="DEMO_MAP_ID">
</gmp-map>
</body>
</html>Bắt đầu
Dự án DefinitelyTyped là một dự án nguồn mở duy trì các tệp khai báo loại cho nhiều gói, bao gồm cả Google Maps. Sử dụng NPM để cài đặt các tệp khai báo JavaScript của Google Maps từ gói @types/google.maps:
npm i -D @types/google.maps
Để biết thêm thông tin, hãy xem tệp nguồn trên GitHub.
Thêm google.maps vào lựa chọn tsconfig types
Nếu tệp tsconfig của bạn đặt tuỳ chọn trình biên dịch types, thì TypeScript chỉ bao gồm các gói @types được liệt kê trong mảng đó. Việc cài đặt @types/google.maps là chưa đủ để bật tính năng hỗ trợ TypeScript cho Google Maps và mã sử dụng không gian tên google không biên dịch được kèm theo lỗi sau:
Error T2503: Cannot find namespace 'google'.
Cách thêm google.maps vào mảng types:
{
"compilerOptions": {
"types": ["google.maps"]
}
}
Ngoài ra, hãy thêm lệnh sau vào tệp khai báo mà dự án của bạn bao gồm, chẳng hạn như vite-env.d.ts:
/// <reference types="google.maps" />
Để biết thêm thông tin, hãy xem phần các loại.
Các gói @types xung đột
Một số thư viện có thể sử dụng một gói khác với @types/google.maps, điều này có thể gây ra xung đột. Sử dụng tuỳ chọn trình biên dịch skipLibCheck để tránh các vấn đề về loại không nhất quán:
{
"compilerOptions": {
"skipLibCheck": true
}
}
Chỉ định typeRoots
Một số khung như Angular có thể yêu cầu chỉ định tuỳ chọn trình biên dịch typeRoots để bao gồm các loại được cài đặt từ @types/google.maps và tất cả các gói @types khác.
Theo mặc định, tất cả các gói @types hiển thị đều được đưa vào quá trình biên dịch.
Các gói trong node_modules/@types của bất kỳ thư mục bao quanh nào đều được coi là hiển thị:
{
"compilerOptions": {
"typeRoots": [
"node_modules/@types"
]
}
}