diff --git a/externs/olx.js b/externs/olx.js
index 0e4988ffb7..16bddc6b9b 100644
--- a/externs/olx.js
+++ b/externs/olx.js
@@ -5,186 +5,6 @@
let olx;
-/**
- * @typedef {{extent: (ol.Extent|undefined),
- * map: (ol.PluggableMap|undefined),
- * minResolution: (number|undefined),
- * maxResolution: (number|undefined),
- * opacity: (number|undefined),
- * preload: (number|undefined),
- * renderBuffer: (number|undefined),
- * renderMode: (ol.layer.VectorTileRenderType|string|undefined),
- * renderOrder: (ol.RenderOrderFunction|undefined),
- * source: (ol.source.VectorTile|undefined),
- * declutter: (boolean|undefined),
- * style: (ol.style.Style|Array.
|ol.StyleFunction|undefined),
- * updateWhileAnimating: (boolean|undefined),
- * updateWhileInteracting: (boolean|undefined),
- * visible: (boolean|undefined),
- * zIndex: (number|undefined)}}
- */
-olx.layer.VectorTileOptions;
-
-
-/**
- * The buffer around the tile extent used by the renderer when getting features
- * from the vector tile for the rendering or hit-detection.
- * Recommended value: Vector tiles are usually generated with a buffer, so this
- * value should match the largest possible buffer of the used tiles. It should
- * be at least the size of the largest point symbol or line width.
- * Default is 100 pixels.
- * @type {number|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.renderBuffer;
-
-
-/**
- * Render mode for vector tiles:
- * * `'image'`: Vector tiles are rendered as images. Great performance, but
- * point symbols and texts are always rotated with the view and pixels are
- * scaled during zoom animations.
- * * `'hybrid'`: Polygon and line elements are rendered as images, so pixels
- * are scaled during zoom animations. Point symbols and texts are accurately
- * rendered as vectors and can stay upright on rotated views.
- * * `'vector'`: Vector tiles are rendered as vectors. Most accurate rendering
- * even during animations, but slower performance than the other options.
- *
- * When `declutter` is set to `true`, `'hybrid'` will be used instead of
- * `'image'`. The default is `'hybrid'`.
- * @type {ol.layer.VectorTileRenderType|string|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.renderMode;
-
-
-/**
- * Render order. Function to be used when sorting features before rendering. By
- * default features are drawn in the order that they are created.
- * @type {ol.RenderOrderFunction|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.renderOrder;
-
-
-/**
- * Sets the layer as overlay on a map. The map will not manage this layer in its
- * layers collection, and the layer will be rendered on top. This is useful for
- * temporary layers. The standard way to add a layer to a map and have it
- * managed by the map is to use {@link ol.Map#addLayer}.
- * @type {ol.PluggableMap|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.map;
-
-
-/**
- * The bounding extent for layer rendering. The layer will not be rendered
- * outside of this extent.
- * @type {ol.Extent|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.extent;
-
-
-/**
- * The minimum resolution (inclusive) at which this layer will be visible.
- * @type {number|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.minResolution;
-
-
-/**
- * The maximum resolution (exclusive) below which this layer will be visible.
- * @type {number|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.maxResolution;
-
-
-/**
- * Opacity. 0-1. Default is `1`.
- * @type {number|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.opacity;
-
-
-/**
- * Preload. Load low-resolution tiles up to `preload` levels. By default
- * `preload` is `0`, which means no preloading.
- * @type {number|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.preload;
-
-
-/**
- * Source.
- * @type {ol.source.VectorTile|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.source;
-
-
-/**
- * Declutter images and text. Decluttering is applied to all image and text
- * styles, and the priority is defined by the z-index of the style. Lower
- * z-index means higher priority. When set to `true`, a `renderMode` of
- * `'image'` will be overridden with `'hybrid'`. Default is `false`.
- * @type {boolean|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.declutter;
-
-
-/**
- * Layer style. See {@link ol.style} for default style which will be used if
- * this is not defined.
- * @type {ol.style.Style|Array.|ol.StyleFunction|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.style;
-
-
-/**
- * When set to `true`, feature batches will be recreated during animations.
- * This means that no vectors will be shown clipped, but the setting will have a
- * performance impact for large amounts of vector data. When set to `false`,
- * batches will be recreated when no animation is active. Default is `false`.
- * @type {boolean|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.updateWhileAnimating;
-
-
-/**
- * When set to `true`, feature batches will be recreated during interactions.
- * See also `updateWhileAnimating`. Default is `false`.
- * @type {boolean|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.updateWhileInteracting;
-
-
-/**
- * Visibility. Default is `true` (visible).
- * @type {boolean|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.visible;
-
-
-/**
- * The z-index for layer rendering. At rendering time, the layers will be
- * ordered, first by Z-index and then by position. The default Z-index is 0.
- * @type {number|undefined}
- * @api
- */
-olx.layer.VectorTileOptions.prototype.zIndex;
-
-
/**
* @typedef {{context: CanvasRenderingContext2D,
* feature: (module:ol/Feature~Feature|ol.render.Feature),
diff --git a/src/ol/layer/VectorTile.js b/src/ol/layer/VectorTile.js
index d8e3085a77..8265ae53db 100644
--- a/src/ol/layer/VectorTile.js
+++ b/src/ol/layer/VectorTile.js
@@ -9,6 +9,65 @@ import VectorLayer from '../layer/Vector.js';
import VectorTileRenderType from '../layer/VectorTileRenderType.js';
import {assign} from '../obj.js';
+
+/**
+ * @typedef {Object} Options
+ * @property {number} [opacity=1] Opacity (0, 1).
+ * @property {boolean} [visible=true] Visibility.
+ * @property {ol.Extent} [extent] The bounding extent for layer rendering. The layer will not be
+ * rendered outside of this extent.
+ * @property {number} [zIndex=0] The z-index for layer rendering. At rendering time, the layers
+ * will be ordered, first by Z-index and then by position.
+ * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be
+ * visible.
+ * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will
+ * be visible.
+ * @property {ol.RenderOrderFunction} [renderOrder] Render order. Function to be used when sorting
+ * features before rendering. By default features are drawn in the order that they are created. Use
+ * `null` to avoid the sort, but get an undefined draw order.
+ * @property {number} [renderBuffer=100] The buffer in pixels around the tile extent used by the
+ * renderer when getting features from the vector tile for the rendering or hit-detection.
+ * Recommended value: Vector tiles are usually generated with a buffer, so this value should match
+ * the largest possible buffer of the used tiles. It should be at least the size of the largest
+ * point symbol or line width.
+ * @property {ol.layer.VectorRenderType|string} [renderMode='hybrid'] Render mode for vector tiles:
+ * * `'image'`: Vector tiles are rendered as images. Great performance, but point symbols and texts
+ * are always rotated with the view and pixels are scaled during zoom animations.
+ * * `'hybrid'`: Polygon and line elements are rendered as images, so pixels are scaled during zoom
+ * animations. Point symbols and texts are accurately rendered as vectors and can stay upright on
+ * rotated views.
+ * * `'vector'`: Vector tiles are rendered as vectors. Most accurate rendering even during
+ * animations, but slower performance than the other options.
+ *
+ * When `declutter` is set to `true`, `'hybrid'` will be used instead of `'image'`.
+ * @property {ol.source.VectorTile} [source] Source.
+ * @property {ol.PluggableMap} [map] Sets the layer as overlay on a map. The map will not manage
+ * this layer in its layers collection, and the layer will be rendered on top. This is useful for
+ * temporary layers. The standard way to add a layer to a map and have it managed by the map is to
+ * use {@link ol.Map#addLayer}.
+ * @property {boolean} [declutter=false] Declutter images and text. Decluttering is applied to all
+ * image and text styles, and the priority is defined by the z-index of the style. Lower z-index
+ * means higher priority. When set to `true`, a `renderMode` of `'image'` will be overridden with
+ * `'hybrid'`.
+ * @property {ol.style.Style|Array.|ol.StyleFunction} [style] Layer style. See
+ * {@link ol.style} for default style which will be used if this is not defined.
+ * @property {number} [maxTilesLoading=16] Maximum number tiles to load simultaneously.
+ * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will be
+ * recreated during animations. This means that no vectors will be shown clipped, but the setting
+ * will have a performance impact for large amounts of vector data. When set to `false`, batches
+ * will be recreated when no animation is active.
+ * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will be
+ * recreated during interactions. See also `updateWhileAnimating`.
+ * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`
+ * means no preloading.
+ * @property {ol.RenderOrderFunction} [renderOrder] Render order. Function to be used when sorting
+ * features before rendering. By default features are drawn in the order that they are created.
+ * @property {(ol.style.Style|Array.|ol.StyleFunction)} [style] Layer style. See
+ * {@link ol.style} for default style which will be used if this is not defined.
+ * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.
+ */
+
+
/**
* @classdesc
* Layer for vector tile data that is rendered client-side.
@@ -18,7 +77,7 @@ import {assign} from '../obj.js';
*
* @constructor
* @extends {module:ol/layer/Vector~VectorLayer}
- * @param {olx.layer.VectorTileOptions=} opt_options Options.
+ * @param {module:ol/layer/VectorTile~Options=} opt_options Options.
* @api
*/
const VectorTileLayer = function(opt_options) {