Typescript 从节点模块导入 ts 文件
Posted
技术标签:
【中文标题】Typescript 从节点模块导入 ts 文件【英文标题】:Typescript import ts file from node module 【发布时间】:2015-08-12 02:04:55 【问题描述】:也许它是重复的,但我已经搜索了一个小时并没有找到答案。
我有一个名为 a-module
的节点模块,其中包含一些 .ts 文件(例如 a.ts
)
我有另一个节点模块b-module
,它的依赖项中有a-module
。
我想将一些 .ts 文件从 a-module
导入到 b-module
。
在b-module
的某个文件中,我写道:
import a = require('a-module/a');
console.log(a);
当我尝试用 tsc 编译 b-module
时,是这样说的
Cannot find external module 'a-module/a'.
我做错了什么?
附:我有用于 SublimeText 的 ArcticTypescript 插件,似乎找到a-module/a
足够聪明。那么为什么 tsc 无法找到我的文件呢?
P.P.S 我的文件结构是这样的
b-module/
node_modules/
a-module/
a.ts
b.ts
我正在尝试将a.ts
导入到b.ts
。
【问题讨论】:
你能发布你的目录结构吗?就像 basarat 所说,TypeScript 编译器需要知道模块的位置。 @vanhelgen 我已经用提供的文件结构更新了我的问题 【参考方案1】:import a = require('a-module/a');
您需要使用相对路径,即../a-module/a
,或者为 TypeScript 显式声明它,即declare module "a-module/a"
。
【讨论】:
如果我的a-module/a
是通过npm install
安装的另一个存储库中的文件a.ts
,我应该在哪里声明?
在你的模块中的一些 .d.ts
文件中
如果我写 import a = require('./node_modules/a-module/a')
然后它编译。但它看起来很奇怪。为什么不像 CommonJS 允许的那样导入呢。
我猜这是因为 TypeScript 必须预先知道模块的类型,所以它坚持知道要加载的确切模块。 Node 在运行时解决依赖关系,所以它没有这个限制。以上是关于Typescript 从节点模块导入 ts 文件的主要内容,如果未能解决你的问题,请参考以下文章
无法在不提供文件扩展名的情况下导入 TypeScript 模块
在没有 require() 的情况下使用 typescript 模块