SelectorEvent 在哪里定义以及如何将其导入以进行类型检查?

where is SelectorEvent defined and how to import it for type-checking purposes?

我正在使用下面的标准(我假设)代码来创建 select 交互,将其添加到地图上并在 selected 或 de[= 要素时采取一些行动33=]编辑:

const select: Select = new Select({
  hitTolerance: 5,
  multi: false,
  condition: singleClick
});
this.map.addInteraction(select);


select.on('select', (se: SelectEvent) => {
  console.log('select fired: ', se);
  // do some stuff using se...
});

我的问题是我正在使用 TypeScript 并想充分利用类型检查,但我不知道从哪里导入 SelectEvent。所以上面的代码没有通过类型检查:

`TS2304: Cannot find name 'SelectEvent'`

当我尝试时:

import {SelectEvent} from 'ol/interaction';

我得到:

TS2305: Module '"../../../node_modules/@types/ol/interaction"' has no exported member 'SelectEvent'.

开放层 - 我的 package.json 的相关部分是:

$ npm ls --depth=0 | grep -i ol | grep -v polyfill
├── @siedlerchr/types-ol-ext@1.0.0 (git+https://github.com/Siedlerchr/types-ol-ext.git#ec995982b2ba7aa4d415e67a350ec4b9f841ea37)
├── @types/ol@6.4.2
├── ol@6.4.3
├── ol-ext@3.1.15

搜索我发现的 SelectEvent 类型:

node_modules/@types/ol/interaction/Select.d.ts:declare class SelectEvent extends BaseEvent {

..但我不清楚如何导入此声明(而且它似乎甚至没有开始导出)。

正如您的 grepping 指出的那样:

node_modules/@types/ol/interaction/Select.d.ts:declare class SelectEvent extends BaseEvent 

node_modules/@types/ol/interaction/Select.d.ts导出:

    export class SelectEvent extends Event {
        constructor(type: SelectEventType, selected: Feature[],deselected: Feature[], mapBrowserEvent: MapBrowserEvent);
        deselected: Feature[];
        mapBrowserEvent: MapBrowserEvent;
        selected: Feature[];
    }

所以你只需要直接从那里导入它,就像这样:

import { SelectEvent } from "ol/interaction/Select";

这应该可以解决您的问题。

顺便说一句,在另一个堆栈交换中也有出色的支持 community 专门针对所有类型的空间软件工程问题。