将TypeScript转换为JavaScript。

72

1
有没有一个库或应用程序可以在主要平台(Windows,Linux,OSX)上将TypeScript转换为JS? - Alex Objelean
1
你的浏览器是一个JS引擎,因此它可以编译TS。 - Guillaume86
这是正确的,但你如何在服务器端实现呢? - Alex Objelean
1
这个问题更通用,因为我对所有可用选项都很好奇。 - Alex Objelean
2
并不是所有的东西都能在Google上找到,特别是当涉及到一门新的语言或者一个人对某项技术的经验时。仅仅因为有谷歌这个工具存在就不在Stack Overflow上提出问题并不是一个合理的理由。 - Alex Objelean
显示剩余7条评论
12个回答

36

TypeScript编译器是用TypeScript构建的,因此可以作为JS文件(tsc.js)使用,可以在任何符合ES3标准的VM或JS实现中运行。

但是,目前编译器的文件I/O基础设施仅支持Node和Windows Scripting Host文件API。如果您想推荐对另一个环境的支持,请随时联系我们的团队,在我们的GitHub网站(原来是CodePlex)上与我们联系。


1
谢谢。理想情况下,我希望有一个Java开源框架,可以将TypeScript编译成JavaScript。由于Java已经是跨平台的,因此可以在任何操作系统上使用它。 - Alex Objelean
6
@AlexObjelean,现在已经可以在任何平台上运行TypeScript编译器了,因为它可以编译成JS。 - Boris Yankov
2
好的,让我换一种方式来表达。在构建期间,您将如何转换服务器端的TypeScript? - Alex Objelean
3
npm install -g typescript会将tsc加入到Node/NPM支持的任何平台的路径中,包括Windows、OS X和Linux。这真的不难,朋友们...... - joshuapoehls
1
@AlexObjelean 可以使用 http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/System.html 来从 JVM 语言(如 Java)运行外部命令,例如 TypeScript 编译器。但是,typescript 标签对于这样的问题来说并不太合适。 - Michael Sondergaard
显示剩余2条评论

26

简短版:如果可以的话,请使用Node。现在它已经变得无法避免了。

也许这不是你想要的答案,但正如大家所提到的,编译器是一个JS文件,因此你的选项就是执行JS文件的选项。

在Windows中,有两个明显的选项,Node和Windows Script Host。

你已经了解了Node,另一个选项是与所有Windows版本一起提供的组件(我认为),你可以像这样执行:

cscript path/to/tsc.js source-file.ts

你可以通过以下方式查看所有编译器选项:

cscript path/to/tsc.js

在Linux上,我想你应该能够使用以下选项(除了node):

  • V8独立的shell,将nodecscript替换为v8-shell
  • ExecJS https://github.com/sstephenson/execjs
  • 任何其他可用于所选平台的JS运行器(例如另一个答案中提到的Rhino)

更新: 另一个答案指出编译器API仅与Node和Windows Script Host(cscript工具)兼容,因此在Linux上,您需要使用Node来编译TypeScript。

如果您在寻找类似于apt get tsc(或者其他Linux/Mac软件包管理器),我认为是不存在的。

我记得在某个地方读到过,I/O针对的是Node和Windows Script Host进行了优化,因此如果遇到选项问题,寻求平台无关性,您可能最终会使用Node。

更新: 这里的另一个答案证实了兼容性相同的情况。


2
使用WSH(cscript)执行tsc.js不再受支持(更多信息)。根据这个答案,最新版本支持通过cscript执行的是v1.8.10 - PolarBear

14

你可以在命令行中使用 ts-node:

npm install ts-node

然后像这样调用命令:

tsc file.ts --outFile file.js

3
第二个命令对我有用,但是我必须在Ubuntu上使用 apt install node-typescript 安装tsc。 - Jacob Philpott
在安装时添加-g选项,或者尝试在安装目录中使用node_modules/.bin/tsc file.ts --outFile file.js - Utopiah

12

具体而言,在服务器上(假设你的服务器有Node.js可用),你只需运行:

node path/to/tsc.js yourFile1.ts yourFile2.ts [etc]

您可以在不提供任何输入文件名的情况下运行该命令,以查看 tsc.js 的命令行帮助文档。


14
npm install tsc; npx tsc main.ts 将会输出 main.js。该命令用于安装 TypeScript 编译器,并将 main.ts 文件编译成 main.js 文件。 - Ray Foss

7
我有一个项目,它将Typescript编译为Java中的Javascript:

https://github.com/martypitt/typescript4j

正如其他答案中所讨论的那样,这个程序使用了Rhino,因此不依赖于npmnode

以下是一个示例:

// Instantiate the compiler:
TypescriptCompiler compiler = new TypescriptCompiler();

// Compile a string:
String output = compiler.compile("class Greeter { greeting: string; }");

// Or, compile and output to a file:
compiler.compile(new File("example.ts"), new File('output.js'));

我在另一个项目 - '烘焙坊'中使用它,以在Spring环境中实现TypeScript资源的即时编译。

1
这是自1.6.0版本以来wro4j支持的功能:http://code.google.com/p/wro4j/wiki/AvailableProcessors - Alex Objelean
1
@AlexObjelean,wro4j的实现依赖于调用“tsc”,而“tsc”又依赖于安装了“npm”。这个实现不会这样做,因为它完全在Rhino内部运行。这就是为什么你链接的页面上,TypescriptProcessor提到“不支持所有平台”的原因。 - Marty Pitt
这是真的。在路线图上加入犀牛实现。干杯! - Alex Objelean

4
如果你需要针对Java进行开发,那么你可以在构建过程中使用Rhino引擎运行tsc.js。

2
编译ts -> js:Node可在所有常见平台上使用,因此我不明白为什么您希望拥有tsc.java,当您已经拥有tsc.js时。安装node并不困难。事实上,它比Java更容易。
一旦您拥有proj.js文件,您就可以将其复制到任何您想要使用的部署平台上。
从我的角度来看,JavaScript - 更准确地说是ECMAScript是Java的替代品。因此,我很高兴不必费心去使用JVM等工具。但是,如果您更喜欢Java,那么为什么还要费心用JS呢?

1
我不认为ECMAScript是Java的替代品。我更喜欢使用JVM来实现目标,而不是安装Node(虽然它是一个很棒的工具,但并没有被广泛采用)。 - Alex Objelean
3
如果你有兴趣的话,应该可以让tsc在Rhino下运行。你需要实现在http://typescript.codeplex.com/SourceControl/changeset/view/d397c54a55db#src%2fcompiler%2fio.ts中找到的"IIO"接口。 - Jason Suárez

1

SublimeText2 技巧 您可以直接从SublimeText2中将typescript转译为javascript(需要node):

/Sublime Text 2/Packages/User中创建一个名为Typescript.sublime-build的文件,并使用以下内容:

{
"cmd": ["tsc", "$file"],
"selector" : "source.ts",
"path": "/usr/local/bin:$PATH"
}

现在,您可以使用Ctrl+B或Cmd+B转译您的代码。


1

我一直在尝试这个,可以使用以下代码将TypeScript编译为JavaScript:

<script src=typescript.js></script>

<script>

var scriptText = ""
        + "/// <reference path=\"test.ts\"/>" + "\r\n"
        + "class Car {"
        + "     constructor (private name: string) { } "
        + "     getName() { "
        + "         var juice = new Juice();"
        + "         return name; "
        + "     } "
        + "} "
        + "var car = new Car('Subaru Impreza');"
        + "console.log(car.getName());";





var TextWriter = function () { };

TextWriter.prototype = {
collected: '',

Write: function (sc) {
    this.collected += sc;
},
WriteLine: function(sc) {
    this.collected += sc + '\n';
},
toString: function() {
    return this.collected;
}
};

var output = new TextWriter();
var tsc = new TypeScript.TypeScriptCompiler(output);

var script = tsc.addUnit(scriptText, "");

tsc.emit();

console.log(output.toString());

</script>

虽然不是完美的解决方案。我正在尝试运行某些东西,以便在C#中将TypeScript转换为JS(使用Javascript .NET),但是在ts.addUnit调用上出现了堆栈溢出。


有一个客户端脚本可以实现这个功能:TypeScript Compile - niutech

1
这是对我有用的:
首先,安装typescript node module >> npm install -g typescript。这将提供一个命令行实用程序tsc
接下来,运行tsc gulpfile.ts gulp-config.ts typings/tsd.d.ts
  • 这将把gulpfile.tsgulp-config.ts文件transpilegulpfile.jsgulp-config.js。我们提供typings/tsd.d.ts文件作为正确转译的参考。
  • typescript node module涵盖了许多选项>>tsc -h以指定输出目录或文件等

1
找不到文件'typings/tsd.d.ts'。 - Taslim Oseni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接