"percentage sign" 在 Vue.js 源代码中是什么意思

What does the "percentage sign" mean in the Vue.js source code

我正在 github 上阅读 Vue.js 的源代码 (here),偶然发现了一些我不知道也找不到答案的东西。

来源的相关部分:

export function isObject (obj: mixed): boolean %checks {
  return obj !== null && typeof obj === 'object'
}

“%”的作用或含义是什么?

这是一个名为 Predicate Function 的 Flow 功能。

简而言之,它表示执行类型细化的函数。

在具体的例子中,表示Flow知道当使用isObject对一个值进行正向测试时,它将是object.

类型

Flow 有一些内置检查来优化类型,包括 obj !== nulltypeof obj === 'object' 之类的东西,但是如果您将它提取到返回 [=15] 的通用 isObject 函数=], Flow 不会相信该函数正在执行类型优化,除非您用 %checks.

标记它

请注意,TypeScript 具有类似的功能,称为 User-Defined Type Guards