为啥 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?的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 学习

TypeScript系列教程04编译参数

TypeScript系列教程04编译参数

为啥 vue 在第一次编译时无法识别 TS 语法,但在第二次编译时可以正常工作?

TypeScript教程# 5:TS编译选项

安装typescript的命令,编译typescr为JavaScript