📓 subtyping.md by @ryan

subtyping

Subtyping, at least in programming, is when a [[type]] is somehow related to another type via substitution. A typical example is that Dog is a subtype of Animal. In some cases, the latter could be substituted for the former, whereas the former could always substitute the latter.

The fancy symbol for subtyping is “≼”, so “A ≼ B” means that A is a subtype of B.

Subtyping is transitive, meaning that if A ≼ B ≼ C, then A ≼ C.

Assuming A ≼ B,

covariance : when (T -> A) ≼ (T -> B)

contravariance : when (B -> T) ≼ (A -> T)

bivariant : both covariant and contravariant

In [[TypeScript]] and other strongly typed languages, functions are bivariant.

Generally, you want functions to be covariant in their return type and contravariant in their argument type.

References

  1. What are covariance and contravariance? | Stephan Boyer