TypeScript وخرائط Google

TypeScript هي مجموعة رئيسية مكتوبة من JavaScript يتم تجميعها إلى JavaScript عادي. يوضح المقتطف أدناه الاستخدام البسيط لخرائط Google باستخدام TypeScript.

let map: google.maps.Map;
const center: google.maps.LatLngLiteral = {lat: 30, lng: -110};

function initMap(): void {
  map = new google.maps.Map(document.getElementById("map") as HTMLElement, {
    center,
    zoom: 8
  });
}

البدء

المشروع DefinitelyTyped هو مشروع مفتوح المصدر يحتفظ بنوع ملفات التعريف لالعديد من الحزم بما في ذلك "خرائط Google". يمكن تثبيت ملفات تعريف JavaScript لتطبيق "خرائط Google" (اطّلع على الملفات المصدر على GitHub) باستخدام NPM من حزمة @types/google.maps.

npm i -D @types/google.maps

الميزات الأولية والتجريبية

لا تحتوي الأنواع عادةً على الخصائص أو الدوال أو الفئات الموجودة في الإصدارات الأولية أو التجريبية. في العديد من هذه الحالات، يمكن تحويل الكائن إلى النوع الصحيح.

يعود سبب الخطأ التالي إلى الموقع الإلكتروني التجريبي "mapId" في MapOptions.

error TS2345: Argument of type '{ center: google.maps.LatLng; zoom: number;
mapId: string; }' is not assignable to parameter of type 'MapOptions'. Object
literal may only specify known properties, and 'mapId' does not exist in type
'MapOptions'.

يمكن تصحيح الخطأ أعلاه باستخدام رمز البثّ أدناه.

{ center: {lat: 30, lng: -110}, zoom: 8, mapId: '1234' } as google.maps.MapOptions

حزم @types متعارضة

قد تستخدم بعض المكتبات حزمة أخرى غير @types/google.maps، ما قد يؤدي إلى حدوث تعارضات. استخدِم خيار برنامج التجميع skipLibCheck لتجنُّب المشاكل المتعلّقة بالأنواع غير المتّسقة.

{
  "compilerOptions": {
    "skipLibCheck": true
  }
}

تحديد typeRoots

قد تتطلب بعض أطر العمل، مثل Angular، تحديد خيار برنامج التجميع typeRoots لتضمين الأنواع المثبّتة من @types/google.maps وجميع حِزم "@types" الأخرى.

{
    ...
    "compilerOptions": {
        ...
        "typeRoots": [
            "node_modules/@types",
        ],
        ...
    }
}