簡體   English   中英

如何修復 OpenLayers 6.6.1 中的 Typescript 錯誤

[英]How do I fix Typescript errors in OpenLayers 6.6.1

升級到 OpenLayers 6.6.1 后,我收到了數百個由泛型引起的打字稿錯誤。

例如...

import olLayerVector from 'ol/layer/Vector';
import olFeature from 'ol/Feature';

public static highlightOverlay: olLayerVector = new olLayerVector({});
const selectedFeatures: Array<olFeature> = 
MapValues.highlightOverlay.getSource().getFeatures();

產生錯誤

通用類型“VectorLayer”需要 1 個類型參數

通用類型“功能”需要 1 個類型參數。

我讀過的一些主題,例如...

https://github.com/openlayers/openlayers/issues/8673

似乎表明使用 // @ts-ignore 是一個修復,但這不是一個很好的解決方案,讓你的項目充斥着泛型的打字稿錯誤。

請告訴我有更好的解決方案......非常感謝任何幫助

我最近將一個大型 angular 項目升級到 OpenLayers 6.6.1 並切換到使用 OpenLayers 生成的 typescript 聲明文件,而不是使用 @types/ol 聲明文件。

Feature 和 VectorLayer 都使用泛型,前者用於 Geometry 類型,后者用於源類型。 可以通過在代碼中包含泛型來避免“泛型類型 'Foo' 需要 1 個類型參數”錯誤,如下例所示:

import { Feature } from 'ol';
import { Geometry } from 'ol/geom';
import { Vector } from 'ol/layer';
import { Vector as VectorSource } from 'ol/source';

// Typescript complains:
let f1: Feature = new Feature();
let vl1: Vector = new Vector({});

// Typescript is fine
let f2: Feature<Geometry> = new Feature<Geometry>();
let vl2: Vector<VectorSource<Geometry>> = new Vector<VectorSource<Geometry>>({});

VectorSource 還為其幾何類型使用了泛型,這就是為什么代碼需要Vector<VectorSource<Geometry>>

我不需要 Geometry 類型的任何類型安全,所以我只使用了超類 Geometry。 但是,如果 Feature 和 source 僅包含 Point 幾何特征,則可以將 Geometry 替換為 Point 之類的東西。

@types/ol 聲明具有泛型的默認值,因此在使用舊的 @types/ol 聲明時可以避免這種語法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM