作者回复: 你的理解是正确的,这也是做这种分类的主要目的和依赖。另外补充一点,“泛型声明”其实是静态声明,与传统的C++中的“模板(泛型)”在语义上是一致的,这是它能反推的根本原因。 泛型工具中的两种分类比较特别,一般的资料中都不这么分的。它们的相同之处在于“求值”,或称为计算的、动态的。我是为了后面讲其它类型的方便而把它们分成声明与转换的两类。声明性的泛型工具返回的结果与它声明的类型一致,这样也就可以反推了(例如Record)。这一点我觉得你也注意到了。 至于Partial主要是它不是一个“已有的类型概念”,所以没分到声明中,同样的还有Required和Readonly。事实上,在语义上它更像一个修饰词,例如: ``` type PartialRecord<T, R> = Partial<Record<T, R>>; ``` 是“声明一个类型”,还是“对类型加以计算”,才是分类的关键。有些东西正好在这二者的边界上,就比较模糊。Partial<X>是“声明了X成员的可选性质”,还是“对X的性质施加了计算”呢?都对呵,视角不同呵。