TypeScript 2.4 changed the way the type system behaves internally to improve error detection in nested callbacks and promises:
- TypeScript's checking of callback parameters is now covariant in relation to immediate signature checks. Previously, it was bivariant and occasionally allowed incorrect types through.
- Basically, this means that callback parameters and classes that contain callbacks are checked more carefully, so Typescript will require stricter types in this release. This is particularly true of promises and observables due to the way in which their APIs are specified.
In TypeScript versions before 2.4, the following example was considered valid, and no errors were thrown:
declare function ...