为什么在Vue.js源代码中看到TypeScript?

Emm*_*uel 2 javascript typescript vue.js

我浏览了vue.js源代码只是看了一眼,然后看到了一些奇怪的代码,经过一些研究,我才知道是TypeScript语法。我的问题是,此语法在“ .js”文件中,我不明白,因为我知道TypeScript文件(.ts)应该编译为纯JS。那么,为什么我仍然在.js文件的function参数中看到类型注释?

function hasAncestorData (node: VNode) {
  const parentNode = node.parent
  return isDef(parentNode) && (isDef(parentNode.data) || hasAncestorData(parentNode))
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ocz 6

这实际上是一个流程代码。您可以/* @flow */一些启用该工具的类型检查的文件的开头看到注释。它与TypeScript有点类似,但是两者并不相同。

快速浏览一下Vue.js github存储库src文件夹,可以发现它们确实将JavaScript用于w / Flow代码,例如:.jssrc/core/vdom/create-component.js

const componentVNodeHooks = {
  init (vnode: VNodeWithData, hydrating: boolean): ?boolean {
Run Code Online (Sandbox Code Playgroud)

但是,如果我们查看dist文件夹,则可以看到那些Flow类型注释已被删除以进行分发。例如,这是上面的内容dist/vue.js(该行号会随着时间推移而腐烂):

var componentVNodeHooks = {
  init: function init (vnode, hydrating) {
Run Code Online (Sandbox Code Playgroud)