TypeScript:防止加载不导出@types定义(TS2306 不是模块)



我已经花费了相当多的时间尝试加载一个 NodeJS 库,该库在@types存储库中有一个(在我看来是错误的)类型定义。

我说的是geolib及其@types/geolib

是的,我知道,该库在 master 上有类型,但还没有标记的版本,我想在将来的情况下解决这个问题。

安装geolib(当时为 2.0.22)

  • npm install geolib --save
  • import * as geolib from 'geolib';

一切都很棒! 但是在您最喜欢的编辑器中没有类型分辨率

安装@types/geolib

  • npm install @types/geolib --save-dev

这是它中断的地方:

node_modules/@types/geolib/index.d.ts' is not a module. (2306)

这是因为类型文件不会export = geolib,但尝试将此文件作为模块加载。

我的目标是简单地加载节点库,并将@types/geolib用作开发的类型提示。

我已经尝试了多个选项,例如使用新的types指令,通过在 tsconfig 中设置types: []来防止自动加载,仅用import 'geolib'导入,但似乎没有什么可以解决定义位于@types并尝试作为模块的问题。

编辑

  • typescript@2.3.4
  • geolib@2.0.22
  • @types/geolib@2.0.2

有同样的问题。

对我有用的是:

import * as GeoLib from 'geolib';

后来例如:

import * as GeoLib from 'geolib';
import PositionAsDecimal = GeoLib.PositionAsDecimal;
distance += GeoLib.getDistance(pointAPositionAsDecimal, pointBPositionAsDecimal, accuracyInMeters, precision);

最新更新