我们有一个用TypeScript编写的npm库包,其中包含供其他项目使用的各种实用程序。我们只需要调用此库lib-utils
。
lib-utils
使用的其中一个库是d3
。 lib-utils
在d3
上有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
。
我尝试过使用以下各项:
/// <reference path="../../node_modules/@types/d3/index.d.ts" />
/// <reference type="d3">
在lib-utils
里面需要d3,但在使用常规模块导入之前我无法解决编译问题,这似乎是我问题的根源。
如何在lib-utils
中进行TypeScript类型检查,而不要求lib-utils
包的使用者提供d3,即使他们没有使用它?
我正在使用systemjs进行打包。简单地指示systemjs忽略d3的解决方案可能有效,但我更愿意在lib-utils
而不是每个消费者中解决这个问题。
答案 0 :(得分:0)
除了在评论中使用composer show -i -t
配置外,您只能导入导入语法中所需的类型。
问题是当你说systemjs
时,编译器假设你需要整个import * as d3 from 'd3'
库,包括代码部分。
你应该这样做:
d3
仅导入类型时,编译器将从JS中删除该导入。