实际上并不是,并不完整。kondo的类型检查系统有点修补起来的。例如,每次它需要做条件类型检查时,都必须输入一个自定义函数。
kondo为core.into有一个自定义函数,它指示返回类型与传递给其第一个参数的集合的类型相同。已经在他们的JIRA看板上有关于添加到另一个函数的ticket,以及在许多其他函数上也没有遵循。例如,函数inc如果在inc中传递了一个整数值,kondo就不知道输出是否仍然是整数。
例如。
以下代码:(nth [1 2 3] 1.5)在kondo中会抛出一个错误(然而,这是不正确的,nth定义了非整数)。
但以下代码(nth [1 2 3] (inc 0.5))通过没有任何错误。
如果继续这样下去,kondo将不得不携带大量逻辑,这些逻辑不一定属于他们的代码库。
如果用户想实现或扩展类似逻辑,这将很困难。没有简单且易于理解的方式来定义它。我原本希望规范能够发展成为开发者以 TypeScript 风格在自身代码库中编码必要类型逻辑的标准方式。例如,如果在你代码库中定义一个集合为整数的集合,或为数据库定义某种自定义类型的集合很重要,那么这些信息将传达给 kondo,它可以依据这些信息执行逻辑,并提前看到一些可能会失败的转换。Spec 和 Malli 已经有一些用于此的系统,但 kondo 目前还没有逻辑来完成它。
我不确定用于进行此类分析的适当逻辑是否应在 kondo 本身实现,还是应在 clojure 代码库的某处实现,因为它是完全依赖于 clojure 的 API 的。我也不知道 spec 或 spec2 是否持有它的正确位置。这就是为什么我在这里提出这个问题。