【问题标题】:How do I fix Typescript errors in OpenLayers 6.6.1如何修复 OpenLayers 6.6.1 中的 Typescript 错误
【发布时间】:2021-07-21 16:32:37
【问题描述】:

升级到 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 是一个修复方法,但这不是让您的项目充斥着泛型的打字稿错误的好方法。

请告诉我有更好的解决方案...非常感谢任何帮助

【问题讨论】:

标签: typescript openlayers openlayers-6 angular-openlayers


【解决方案1】:

我最近将一个大型 Angular 项目升级到 OpenLayers 6.6.1 并切换到使用 OpenLayers 生成的打字稿声明文件,而不是使用 @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&lt;VectorSource&lt;Geometry&gt;&gt;

的原因

我不需要 Geometry 类型的任何类型安全性,所以我只使用了超类 Geometry。但是,如果 Feature 和 source 仅包含 Point 几何特征,则可以将 Geometry 替换为 Point 之类的东西。

@types/ol 声明具有泛型的默认值,因此在使用较旧的 @types/ol 声明时可以避免这种语法。

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 2021-04-19
    • 1970-01-01
    • 2021-07-06
    • 2013-06-17
    • 2020-10-06
    • 1970-01-01
    • 2022-11-11
    • 2020-04-30
    相关资源
    最近更新 更多