It's not external to TS. You write your types by passing object literals to the functions that generate the validators; TypeScript then infers shockingly precise types, which can be extracted using TypeScript's type manipulation utilities.
It does support generics [0].
[0] https://github.com/gcanti/io-ts/blob/master/index.md#generic...