如何编译打字稿代码在浏览器?

klu*_*msy 23 browser typescript

是否有可能运行在浏览器中打字稿编译器在浏览器transpiling TS到JS 100%.用例将实现运行100%的客户端在线打字稿IDE,它有一个"播放"按钮执行该项目.所以我需要将项目转换为JavaScript,以便浏览器执行代码.

我相信它应该是作为简单的加载相关的打字稿JS文件,创建正确的类的实例(编译器?),并调用一个或两个方法.

什么是适合装载在浏览器中编译器的库文件?TypeScript编译器API参考文档在哪里?我应该从哪里开始挖?

这不要求任何特定的工具,但是任何方式与这个特定的计算机语言要做到这一点,因而在题目.

bas*_*rat 15

您可以使用typescript-script:https://github.com/basarat/typescript-script

但是不要在生产中做到这一点,因为它将会是缓慢的.

您可以使用browserify加载NPM包在浏览器中.

  • 看起来过时和被遗弃,你确定吗? (5认同)
  • 对于在浏览器中的转译,你不需要做任何 hack - 只需在你的 html 文件中包含 node_modules/typescript.js 就可以使用编译器 API。这是一个在浏览器中 100% 转换为 js 的游乐场:https://cancerberosgx.github.io/typescript-in-the-browser/typescript-compiler/#example=tsTranspilingProject1 (3认同)

Art*_*sun 14

将 ts 转换为 js 就像typescriptServices.js从 typescript repo或 npm加载文件一样简单,并使用它window.ts.transpile(tsCode)

JSFiddle

<script src="https://unpkg.com/typescript@latest/lib/typescriptServices.js"></script>
<script>
const tsCode = 'let num: number = 123;';
const jsCode = window.ts.transpile(tsCode);
document.write(jsCode);
</script>
Run Code Online (Sandbox Code Playgroud)

输出:

var num = 123;
Run Code Online (Sandbox Code Playgroud)

您还可以将ts 编译器选项对象作为第二个参数传递ts.transpile()给以指定输出 js 是否应为 es2020、es5、es6 和其他内容,但对于值的含义,您可能必须深入研究源代码。




由于这个问题被重新打开(正如计划的 >:D),我也在这里重新发布我的评论。

@basarat 的解决方案很棒;尽管他的库已经过时并被废弃了,但它对我编写另一个支持子依赖项的自给自足的现代库有很大帮助:ts-browser

用法:(假设您在所有 ts 文件中使用相对路径)

<!-- index.html -->
<script type="module">
    import {loadModule} from 'https://klesun.github.io/ts-browser/src/ts-browser.js';
    loadModule('./index.ts').then(indexModule => {
        return indexModule.default(document.getElementById('composeCont'));
    });
</script>
Run Code Online (Sandbox Code Playgroud)
// index.ts
import {makePanel} from './utils/SomeDomMaker'; // will implicitly use file with .ts extension

export default (composeCont) => {
    composeCont.appendChild(makePanel());
};
Run Code Online (Sandbox Code Playgroud)