typescript与类型系统

1. 值是值,类型是类型;
2. 类型是一个集合,值是集合中的元素。如Boolean类型是True和False的集合。
3. 代数数据类型(ADT, Algebraic Data Types),提供了多个类型组合成新的类型的方式。
这里有两种方式:和 和 积
- Sum type: size(A | B) = size(A) + size(B)
- Product type: size(A & B) = size(A) * size(B)
4. 子类型,包含关系。可以做类型替换。类型替换后的继承关系有逆变、协变、双变和不变。子类型可以继承。
5. 泛型是参数化多态,类型也可以作为函数的参数。如const f = <A>(a: A) > a;
6. 类型可以进行计算。类型算子,对应的系统叫高阶类型演算。
7. 类型体操的库:https://github.com/type-challenges/type-challenges,有很多题可以练习类型计算。
8. 类型计算可以做到更严格的类型约束,使程序更健壮。