将@types用于Typescript npm库,而不要求上游项目安装该依赖项

时间:2017-05-25 14:55:15

标签: typescript npm systemjs

我们有一个用TypeScript编写的npm库包,其中包含供其他项目使用的各种实用程序。我们只需要调用此库lib-utils

lib-utils使用的其中一个库是d3lib-utilsd3上有peerDependency和devDependency,在@types/d3上有devDependency。

并非所有使用lib-utils包的项目都会使用d3中的lib-utils代码,因此我不希望这些项目被强制提供。

但是,为了在内部使用d3,有几个lib-util的源文件使用d3导入import * as d3 from "d3"以获得编译时检查。对于使用d3的任何上游库,即使他们不使用lib-utils部分,这似乎也会对d3设置运行时要求。当上游项目在浏览器中加载时,我会在加载lib-utils时收到404错误并尝试加载d3

我尝试过使用以下各项:

  1. /// <reference path="../../node_modules/@types/d3/index.d.ts" />
  2. /// <reference type="d3">
  3. lib-utils里面需要d3,但在使用常规模块导入之前我无法解决编译问题,这似乎是我问题的根源。

    如何在lib-utils中进行TypeScript类型检查,而不要求lib-utils包的使用者提供d3,即使他们没有使用它?

    我正在使用systemjs进行打包。简单地指示systemjs忽略d3的解决方案可能有效,但我更愿意在lib-utils而不是每个消费者中解决这个问题。

1 个答案:

答案 0 :(得分:0)

除了在评论中使用composer show -i -t 配置外,您只能导入导入语法中所需的类型。

问题是当你说systemjs时,编译器假设你需要整个import * as d3 from 'd3'库,包括代码部分。

你应该这样做:

d3

仅导入类型时,编译器将从JS中删除该导入。