将 JSTS 库类型绑定用于 TypeScript

问题描述

我最近在使用 JSTS 库及其 Typescript 类型绑定时遇到了困难,但最终我让它工作了,但我不完全理解为什么。

我从安装 JSTS 及其绑定开始:

npm i --S jsts
npm i --D @types/jsts

最初我在我的代码中尝试了以下内容

import jsts from 'jsts';
const {OL3Parser} = jsts.io;
const parser = new OL3Parser();

上述类型检查没有错误,但在运行时崩溃:Uncaught TypeError: Cannot read property 'io' of undefined

此外,如果我尝试在上面的示例中输入 parser 变量,如下所示:

const parser: OL3Parser = new OL3Parser();

……然后我会得到:

TS2749: 'OL3Parser' refers to a value,but is being used as a type here. Did you mean 'typeof OL3Parser'?

然后我尝试了:

import OL3Parser from 'jsts/org/locationtech/jts/io/OL3Parser'; 

类型检查失败:

TS7016: Could not find a declaration file for module 'jsts/org/locationtech/jts/io/OL3Parser'.

根据一些在线研究,我最终得到了:

const jsts = require('jsts');
const parser: jsts.io.OL3Parser = new jsts.io.OL3Parser();

以上都按预期进行类型检查和工作,但我不喜欢长限定名,我不明白为什么我必须以这种特殊方式使用库。

有什么想法吗?

解决方法

您需要按如下方式导入 jsts

import * as jsts from 'jsts';

这样做的原因是,jsts 宁愿导出命名空间对象,而不是命名导出或默认导出。

因此,使用上述方法将模块的完整命名空间导入到单个变量中,从而提供对各种 jsts 类的进一步访问。

例如:

const reader = new jsts.io.GeoJSONReader();