从JavaScript调用正确的TypeScript代码

xen*_*_33 11 javascript typescript

在我们的大型企业项目中,我们遇到的情况似乎没有在互联网上的文章和帖子中得到很好的描述.

我们需要将支持SPA的现有JavaScript基础结构代码与其他团队在TypeScript上开发的代码集成在一起.对于许多政治限制和可用的开发资源,我们无法彻底改变方法(即只选择一种语言).我们完全理解,将两个基础架构集成在一起并不是一个好主意,这些基础架构是用不同的语言编写的.

我们还需要评估从JavaScript代码调用TypeScript的影响和最佳实践.

TypeScript基本上被编译成JavaScript的理由似乎很模糊,因为关于如何从手写JavaScript中正确使用已编译的JavaScript以及隐藏的警告(或替代方案)的主题信息上没有可信赖的来源.

看起来,当TypeScript代码需要调用JavaScript时,相反的情况令人惊讶地被很好地描述.

对这个话题有什么深刻的想法?

UPD

具体来说,这是我们现在寻求答案的问题清单:

  • 什么是广泛使用泛型,类层次结构,接口的TypeScript API的JavaScript形状?
  • 捆绑,缩小,AMD有什么问题吗?
  • 是否可以使用TypeScript编写基本的Angular控制器,以及从中继承其功能的另一个JavaScript Angular控制器?会有什么警告?

实际上我们认为我们尚未提出所有问题.在经过几个小时的思考之后,他们才刚刚出现.

Rya*_*ugh 21

TypeScript基本上被编译成JavaScript的理由似乎很模糊,因为关于如何从手写JavaScript中正确使用已编译的JavaScript的主题的信息没有可信的来源以及隐藏的警告是什么

从JavaScript中使用TypeScript与从TypeScript中使用TypeScript或从JavaScript中使用JavaScript相同.例如,假设您在TypeScript中有一个函数:

function f(n: number) { return 'the number is ' + n; }
Run Code Online (Sandbox Code Playgroud)

要从TypeScript调用此函数,您可以编写

var x = f(42);
Run Code Online (Sandbox Code Playgroud)

要从JavaScript调用此函数,您可以编写

var x = f(42);
Run Code Online (Sandbox Code Playgroud)

假设您在TypeScript中有一个类:

class MyClass { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

要从TypeScript中使用此类,您可以编写

var c = new MyClass();
Run Code Online (Sandbox Code Playgroud)

要从JavaScript中使用此类,您可以编写

var c = new MyClass();
Run Code Online (Sandbox Code Playgroud)

换句话说,它完全一样.没有给出任何指导,因为不需要任何指导.

  • 你大肆过度思考它.这里确实没有更复杂的事情发生.你列出的所有东西都是可能和直截了当的. (4认同)
  • 谢谢你的回答。当您遇到类似返回“ Hello world!”或“ Hello daddy!”的函数时,情况就微不足道了。但是,当企业中的某人在TypeScript中为您提供了使用大量泛型,接口和继承的框架/基础结构代码时,这并非易事。尽管我们仍在评估警告,但我们认为缩小,捆绑,AMD和其他类似事物可能会产生重大影响 (2认同)

Mic*_*haC 10

简单地说,如果你必须在你自己的使用JavaScript的项目中集成/使用一个用Typescript编写的库,你将使用编译的JavaScript API!

你基本上扔掉了TypeScript带来的所有优点,而不是纯JavaScript.

这意味着您不必关心TypeScript的任何特定内容,例如泛型等.您只需要使用TypeScript库的已编译输出...

举个例子,请访问http://www.typescriptlang.org/Playground 选择"演练:泛型".在右侧,您应该看到已编译的JavaScript.它没有任何泛型或任何特殊的东西,它仍然是纯JavaScript.这就是你要处理的......

你的"具体"问题:

  • 什么是广泛使用泛型,类层次结构,接口的TypeScript API的JavaScript形状? 往上看.它将是简单的旧Javascript.对你来说没什么区别.
  • 捆绑,缩小,AMD有什么问题吗? 不,因为编译的TypeScript是纯JavaScript,可以缩小等...
  • 是否可以使用TypeScript编写基本的Angular控制器,以及从中继承其功能的另一个JavaScript Angular控制器?会有什么警告? 是的,你当然可以用编译的JavaScript做任何你想做的事.

使用来自Typescirpt的编译JavaScript的唯一缺点是,你丢弃了TypeScript可以给你的强大功能,比如......类型......如果其他团队已经在那条路线上,你可能要考虑写你的部分在TypeScript中;)

  • 总的来说,很难预测 TS 或 Angular 的未来会带来什么,但是想想如果 Angular 实现了重大更改,你的 javascript 会发生什么?您必须更改您的 JavaScript。所以这不是不使用 TS 的理由,对吗?;) 相反,由于可用的工具,重构 TS 代码会容易得多……您还可以在编译 TS 时选择要针对的标准(ECMAScript 版本)。因此,如果您想使用新版本,TS 已经完全准备好并且已经支持某些功能...... (2认同)