【问题标题】:TypeScript: Prevent loading @types definition that does not export (TS2306 is not a module)TypeScript:防止加载不导出的@types 定义(TS2306 不是模块)
【发布时间】:2017-11-23 22:32:18
【问题描述】:

我已经花费了好几个小时来尝试加载一个 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

【问题讨论】:

  • 似乎是类型定义的问题。作为一种解决方法,您可以尝试添加自定义 d.ts 文件并使用导出自己声明模块。
  • 是的,我有点想避免这样做,因为他们在那里。我只需要防止它们作为模块加载。
  • 这里有同样的问题。你有没有机会解决这个问题?

标签: node.js typescript


【解决方案1】:

有同样的问题。

对我有用的是:

import * as GeoLib from 'geolib';

及以后的例子:

import * as GeoLib from 'geolib';
import PositionAsDecimal = GeoLib.PositionAsDecimal;

distance += GeoLib.getDistance(pointAPositionAsDecimal, pointBPositionAsDecimal, accuracyInMeters, precision);

【讨论】:

  • 嘿,Jimmy,导入不是问题 :) 这都是关于 DefinitiveTyped 中的类型定义的。 geolib 的 master 分支确实包含正确的类型定义,但仍未重新打包发布。所以最好安装 master 分支而不是 2.0.22 标签并使用它获取类型。
  • 检查。没有那个问题。
猜你喜欢
  • 2017-01-09
  • 2020-04-08
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 2022-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多