我对 Flow、Typescript 和类似的超集 javascript 语言的使用有疑问。
如何从纯 js 代码中调用用 Typescript 编写的内容?
该机制看起来像 Scala 和 Java 的互操作吗?就像下面的文章。
https://blog.akquinet.de/2011/07/20/integrating-scala-components-in-a-java-application/
我对 Flow、Typescript 和类似的超集 javascript 语言的使用有疑问。
如何从纯 js 代码中调用用 Typescript 编写的内容?
该机制看起来像 Scala 和 Java 的互操作吗?就像下面的文章。
https://blog.akquinet.de/2011/07/20/integrating-scala-components-in-a-java-application/
通常,Typescript 库会被编译成 .js 和 .d.ts 文件,前者以编译后的代码为特色,后者以 Typescript 类型 AKA 类型声明为特色。
如果您在源代码中使用 Typescript,通常编译器应该在编译过程中选择这些 .d.ts 文件(解析模块依赖项)。
如果您将纯 Jabba-the-Hutt-script 用于您的源代码,这些 .d.ts 可以方便您的编辑器提供建议、错误突出显示和其他内容。如果您使用 Babel(如果您这样做,它也可能被替换为一个完整的tsc
),那么在编译步骤中将会有更多的签名重新检查。
关于 Flow——除非你是 Evan,否则谁会关心 Flow,你在 2016 年致力于 Vue 2.xx。
但实际上没有,我出去阅读网站上的文档,看起来编译器输出了一个版本的 js 文件,其中去掉了你的类型注释,它以 Babel 插件和名为flow-remove-types
. 与所做的相反,没有提及在编译过程之后会保留键入信息tsc
。
就我在 Node 环境编程方面的经验而言,有点像你应该静态链接库,使用源代码本身来获取类型信息,因为在编译之后它被剥离了,呵呵。
但是来吧,正如我之前提到的,Flow 无论如何都被认为是弃用的,没有理由在 Typescript 上使用它。
您将此与 Java 和 Scala 关系的类比是无效的。更像是 JVM 指令集和 Java(或 Scala,或几乎每一种被编译到 JVM 字节码中的语言)本身之间的关系。
在那,假设你在字节码中写了一些东西,你需要在 Java 领域的某个地方调用一些签名。需要考虑的事情:
因此,当谈到 Typescript(以及 Flow 太 AFAIK)时,我们有以下内容:
另外,请注意,没有“从 JVM 字节码调用 Java 代码”这样的东西,就像没有“从 .NET CIL 调用 C# 代码”和“从 LLIR 调用 C 代码”这样的东西。 . 源代码已经过去了,剩下的是它的编译形式。您可能会或可能不会将编译后的版本“源映射”到源代码,本质上允许导航甚至调试,但是您调用的代码与源代码不同。
PS:不建议我上面写的所有内容,这是一个hack。您依赖于编译器的输出,因此依赖于它的特定实现。您可能应该做的是使用 Typescript 编译您的 js 代码,并让编译器注意互操作。
PPS:我上次检查时,facebook/flow
自 TSC 发布以来已弃用,强烈建议您永远不要使用 NOT Typescript 启动项目。
PPPS:CommonJS 不是 Javascript 的超集。CommonJS 甚至不是一种语言。