问题描述
我最近在使用 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();