【问题标题】:Use openlayers with typescript project将 openlayers 与 typescript 项目一起使用
【发布时间】:2020-10-05 17:36:33
【问题描述】:

我正在尝试在我的项目中使用新的 ol (>6.0.0) 和 typescript。在以前的版本中,我可以像这样使用它 -

///<reference path='../@types/openlayers/index.d.ts'/>

并使用全局 ol 对象,例如

ol.source.OSM()

但是新版本的 ol 实际上并没有这个单一的对象,而是一些模块。我尝试使用新 ol 的类型来引用文件夹的路径,但它似乎并没有真正起作用。另一方面,当我尝试导入它们时,例如

import * as Map from 'ol/Map'

它说,我必须在我的打字稿配置中使用模块:“系统”或模块:“AMD”。但这是唯一的方法吗?我的项目结构比较复杂,很难实现requirejs或者systemjs。在这种情况下,最好的解决方案是什么?

更新: 我在 index.html 中添加了 systemJS。但是有一个大问题 - 每当我尝试导入我的 js 文件时,使用 systemjs 它工作得很好 - 我可以使用在其中声明的所有函数等等。但是,当我在文件中包含任何导入时(例如 import {A} from "someconst"),systemjs 会停止处理大量错误消息。我完全不明白为什么会这样。

【问题讨论】:

标签: javascript typescript openlayers


【解决方案1】:

您的导入方式已更改 - 不要使用 ol 命名空间。

显式导入类型:

import { Map } from 'ol';
import { fromLonLat } from 'ol/proj';
import { Coordinate } from 'ol/coordinate';
// etc

关于打字,官方的打字还没有,但我发现https://www.npmjs.com/package/@types/ol 工作得很好。

【讨论】:

  • 嗯,是的,我得到了这个部分。但我的意思是,为了这样做,我需要在我的项目中添加 requireJS 或 SystemJS。如果有的话,我有点想找到另一种方法
  • 我不确定你是否这样做 - 检查这个只有 ol@types/ol 包的 stackblitz:stackblitz.com/edit/so-ol-imports?file=index.ts。除非 stackblitz 在内部处理它?
  • 嗯,我想,我不能这样做,因为我的打字稿配置了一个输出文件。因此,如果我尝试导入/需要模块,它会要求我使用 module:"System" 或 module:"AMD"
  • 你绝对需要在你的 tsconfig 中设置outFile 吗?如果您需要单个输出文件,是否可以在 tsc 完成工作后使用捆绑程序来创建它?
猜你喜欢
  • 1970-01-01
  • 2020-04-04
  • 2018-06-25
  • 2014-12-25
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 2019-06-06
相关资源
最近更新 更多