@
cmdOptionKana 因为 type operator 这种东西是个潘多拉魔盒,一旦跨越了泛型,追求更高级的类型系统,就要加无数 type operator,加了一个就会发现你需要更多的 type operator,最后还是有 cover 不了的 case 。直到把 type system 变成一个真正的编程语言,或者跟本语言合体,签名和非签名代码可以互相混用。
TS 的类型系统不像普通的 Hindley-Milner,简单优雅地实现泛型,大部分情况都能推导就结束了。
首先要兼容 JS,type 已有语言用 Hindley-Miller 这种系统肯定就不行。历史包袱很多。
然后 type 一个没 type 过的语言,要 annotate 已有的库就非常困难,比如 JS 里完全就可以写出来如果入参是奇数,返回值就是 File,偶数返回值就是 Function 这些行为。所以要加 operator 尽量 cover 这些 case 。
这个趋势的终点就是语言和类型系统完全融合,成为一个完全的 dependent type 语言,效果就是能自己写一个 type safe 的 printf ( parse 第一个参数,字符串里面有几个%s%d 之类的来决定后面的参数类型,我理解主流语言还没有能做到的),或者一个 SQL 或者 GraphQL 查过去,不依赖 codegen 就能做到强类型(也不依赖 F#的那种 type provider )。
但是里这个距离应该还有很远,估计最后还是要有新语言或者重写来解决。不过让所有人能认识到这种需求是存在的是件好事,不要在泛型上继续内卷……就跟 Java 1.5 之前很多人认识不到泛型有用一样。
对这个话题感兴趣可以搜索一下 Lambda cube 这个概念。