为啥 Typescript 编译器不会将 .ts 更改为 .js?
Posted
技术标签:
【中文标题】为啥 Typescript 编译器不会将 .ts 更改为 .js?【英文标题】:Why does Typescript compiler not change .ts to .js?为什么 Typescript 编译器不会将 .ts 更改为 .js? 【发布时间】:2016-04-19 10:42:48 【问题描述】:在下图中左侧的文件夹中,您可以看到我的 /src Typescript(蓝色)使用 tsc 编译成我的 /dist(紫色)javascript。
您可以在左侧的源文件中看到引用 .ts 模块文件的源文件,它没有被编译为引用右侧的 .js 模块文件。
为什么不呢?如果 tsc 不转换引用,Javascript 怎么可能运行?
第二个问题:然后我尝试手动将编译后的引用从 .ts 更改为 .js 并运行 node dist/server.js 但是我收到错误找不到模块工具/typescriptImport.js'。为什么node在正确引用的时候找不到模块(在最右边可以看到它是一个模块)?
【问题讨论】:
从import
声明中,尝试删除.ts
扩展并将路径设置为./tools/typescriptImports
。没有扩展名的首选方式是extension agnostic
。
正如预期的那样,tsc 然后在 .js 输出中保持该行不变,没有扩展名。但是node仍然找不到模块。
大多数时候,这个问题是通过添加一个.d.ts
文件来解决的。尝试创建一个简单的typescriptImports.d.ts
文件并引用它。
你试过我告诉你的相对路径了吗?
啊,我没有注意到'./',也不认为它有什么不同。现在可以了,谢谢。我会把你的答案标记为答案。
【参考方案1】:
您不应该在import
命令中编写扩展名.ts
。
对应文档:http://www.typescriptlang.org/Handbook#modules-going-external
【讨论】:
谢谢。你能看出node在运行js时找不到模块的任何原因吗? 尝试将转译后的JS文件中的路径改为相对路径。 (例如var moduleA = require( "./module-a.js" );
)【参考方案2】:
对于初学者,您必须从 import
中删除 .ts
扩展名。 TypeScript 表示它将其视为静态字符串并且不会更改它。
其次,根据经验,我猜使用.d.ts
文件可能会解决您的module not found
错误。通过使用这个小技巧,我已经解决了很多次。您可以使用/// <reference path="tools/typeScriptImports.d.ts" />
引用它。想象一下 .d.ts
作为 TypeScript 的头文件。
最后,尝试创建相对于server.js
文件的路径。所以:./tools/typeScriptImports
.
【讨论】:
以上是关于为啥 Typescript 编译器不会将 .ts 更改为 .js?的主要内容,如果未能解决你的问题,请参考以下文章