Defaults for the Layer, Source and Feature generics

This commit is contained in:
Andreas Hocevar
2022-01-26 19:07:47 +01:00
parent 2e5c1f2af9
commit 94cc414ea2
9 changed files with 26 additions and 19 deletions

View File

@@ -11,7 +11,7 @@ import {listen, unlistenByKey} from './events.js';
*/
/**
* @typedef {Feature<import("./geom/Geometry.js").default>|import("./render/Feature.js").default} FeatureLike
* @typedef {Feature|import("./render/Feature.js").default} FeatureLike
*/
/***
@@ -70,7 +70,7 @@ import {listen, unlistenByKey} from './events.js';
* ```
*
* @api
* @template {import("./geom/Geometry.js").default} Geometry
* @template {import("./geom/Geometry.js").default} [Geometry=import("./geom/Geometry.js").default]
*/
class Feature extends BaseObject {
/**

View File

@@ -1007,8 +1007,7 @@ function createFeatureStyleFunction(
if (drawName) {
const geometry = feature.getGeometry();
if (geometry) {
const type = geometry.getType();
if (type === GeometryType.GEOMETRY_COLLECTION) {
if (geometry instanceof GeometryCollection) {
multiGeometryPoints = geometry
.getGeometriesArrayRecursive()
.filter(function (geometry) {
@@ -1020,6 +1019,7 @@ function createFeatureStyleFunction(
});
drawName = multiGeometryPoints.length > 0;
} else {
const type = geometry.getType();
drawName =
type === GeometryType.POINT || type === GeometryType.MULTI_POINT;
}

View File

@@ -110,7 +110,7 @@ class Polyline extends TextFeature {
}
/**
* @param {import("../Feature.js").default} feature Features.
* @param {import("../Feature.js").default<LineString>} feature Features.
* @param {import("./Feature.js").WriteOptions} [opt_options] Write options.
* @protected
* @return {string} Text.
@@ -126,7 +126,7 @@ class Polyline extends TextFeature {
}
/**
* @param {Array<import("../Feature.js").default>} features Features.
* @param {Array<import("../Feature.js").default<LineString>>} features Features.
* @param {import("./Feature.js").WriteOptions} [opt_options] Write options.
* @protected
* @return {string} Text.

View File

@@ -421,7 +421,7 @@ class Draw extends PointerInteraction {
/**
* Sketch feature.
* @type {Feature}
* @type {Feature<import('../geom/SimpleGeometry.js').default>}
* @private
*/
this.sketchFeature_ = null;
@@ -1022,7 +1022,7 @@ class Draw extends PointerInteraction {
/**
* Stop drawing without adding the sketch feature to the target layer.
* @return {Feature} The sketch feature (or null if none).
* @return {Feature<import("../geom/SimpleGeometry.js").default>} The sketch feature (or null if none).
* @private
*/
abortDrawing_() {

View File

@@ -253,7 +253,7 @@ class Modify extends PointerInteraction {
/**
* Editing vertex.
* @type {Feature}
* @type {Feature<Point>}
* @private
*/
this.vertexFeature_ = null;

View File

@@ -25,7 +25,7 @@ import {listen, unlistenByKey} from '../events.js';
*/
/**
* @template {import("../source/Source.js").default} SourceType
* @template {import("../source/Source.js").default} [SourceType=import("../source/Source.js").default]
* @typedef {Object} Options
* @property {string} [className='ol-layer'] A CSS class name to set to the layer element.
* @property {number} [opacity=1] Opacity (0, 1).
@@ -93,8 +93,8 @@ import {listen, unlistenByKey} from '../events.js';
* @fires import("../render/Event.js").RenderEvent#prerender
* @fires import("../render/Event.js").RenderEvent#postrender
*
* @template {import("../source/Source.js").default} SourceType
* @template {import("../renderer/Layer.js").default} RendererType
* @template {import("../source/Source.js").default} [SourceType=import("../source/Source.js").default]
* @template {import("../renderer/Layer.js").default} [RendererType=import("../renderer/Layer.js").default]
* @api
*/
class Layer extends BaseLayer {

View File

@@ -96,8 +96,9 @@ function getRenderExtent(frameState, extent) {
fromUserExtent(layerState.extent, frameState.viewState.projection)
);
}
const source =
/** {import("../../source/Tile.js").default} */ layerState.layer.getRenderSource();
const source = /** @type {import("../../source/Tile.js").default} */ (
layerState.layer.getRenderSource()
);
if (!source.getWrapX()) {
const gridExtent = source
.getTileGridForProjection(frameState.viewState.projection)

View File

@@ -115,7 +115,7 @@ class Cluster extends VectorSource {
this.geometryFunction =
options.geometryFunction ||
function (feature) {
const geometry = feature.getGeometry();
const geometry = /** @type {Point} */ (feature.getGeometry());
assert(geometry.getType() == GeometryType.POINT, 10); // The default `geometryFunction` can only handle `Point` geometries
return geometry;
};

View File

@@ -34,7 +34,7 @@ import {xhr} from '../featureloader.js';
* @classdesc
* Events emitted by {@link module:ol/source/Vector} instances are instances of this
* type.
* @template {import("../geom/Geometry.js").default} Geometry
* @template {import("../geom/Geometry.js").default} [Geometry=import("../geom/Geometry.js").default]
*/
export class VectorSourceEvent extends Event {
/**
@@ -170,7 +170,7 @@ export class VectorSourceEvent extends Event {
*
* @fires VectorSourceEvent
* @api
* @template {import("../geom/Geometry.js").default} Geometry
* @template {import("../geom/Geometry.js").default} [Geometry=import("../geom/Geometry.js").default]
*/
class VectorSource extends Source {
/**
@@ -299,9 +299,15 @@ class VectorSource extends Source {
let collection, features;
if (Array.isArray(options.features)) {
features = options.features;
features =
/** @type {Array<import("../Feature.js").default<Geometry>>} */ (
options.features
);
} else if (options.features) {
collection = options.features;
collection =
/** @type {Collection<import("../Feature.js").default<Geometry>>} */ (
options.features
);
features = collection.getArray();
}
if (!useSpatialIndex && collection === undefined) {