最近在沉迷 TS 类型编程,追求极致性能。知道有个叫尾递归的东西可以提高递归层数。但是实际一试,还是有限制,最多 1000 层。 如何在递归层数不变的情况下完成做出更多动作呢?且听我娓娓道来…… 普通的递归 这里我们就用“生成特定长度的字符串字面量类型”来举例。 之所以不用元组而用字符串,是因为目前本人使用 VSCode 中 TS v
递归类型定义是指在类型定义中使用自身的类型,这种类型定义可以用于定义树形结构、链表、递归函数等。 在TypeScript 中,我们可以使用 interface 或 type 关键字来定义递归类型。下面是一个使用 interface 定义的树形结构的例子: ``` interface TreeNode { value: number; children?: TreeNode[]; } ``` 在这个...
递归类型定义不仅用于C语言,也被其他语言所用。例如,在 C++中我们可以用递归类型定义来定义二叉树,代码如下: 在递归类型定义中,无论是链表、树或图等数据结构,我们需要确保递归定义在某一时刻会停止,避免无限循环。例如,在二叉树定义中,我们知道了一个节点没有子节点时,它就不再是一个节点,这就是循环终止的条件...
再测试一下你就会发现 TS 计算出了最终的结果: 总结 想取一个可选索引的值,需要先用 Required 把索引类型去掉可选然后再取。但是当层数多了的话,这样一层层处理挺麻烦的,可以用类型编程递归处理下。 用映射类型的语法去掉索引类型的可选修饰,判断值的类型,如果还是可选的索引,那就继续递归的处理。 判断可选索...
常见的几种RuntimeException
一个没有任何实用价值的神经项目,堪称21世纪行为艺术。因为该项目魔改了TS编译器,移除了所有递归深度限制和Union大小限制,并且把stack limit调得非常高。 但是非常酷炫。 顺便说一句,这很明显不是我做的,我没有这么闲( 令我很惊讶的是在移除了tsc中一些不必要的类型检查机制后,只让tsc执行类型推断的性能出乎意料的...
用TS 实现了一个简单的 type-level Parsec,就是 Haskell 那个 Parsec. 这里简单实现了一个基本的 JSON Parser. 这东西完全是编译期计算的,全都是类型体操,没有一点运行时代码。图二展示了这个 JSON Parser 自身的全部代码。这个神秘东西是怎么实现的呢?众所周知 Haskell 的 Parsec 实际上就是提供了一堆组合子,...
想取一个可选索引的值,需要先用 Required 把索引类型去掉可选然后再取。但是当层数多了的话,这样一层层处理挺麻烦的,可以用类型编程递归处理下。 这两天东东遇到一个 TS 的问题,跑来问我。 问题是这样的: 这样一个 interface,想取出 userInfo 的类型来: ...