The problem seems to be specific to how strictFunctionTypes affects generic class type.
Here is a class that closely reproduces what happens and cannot be simplified
This is at it's core an issue of variance. So first a variance primer:
Given a generic type Foo, and two related types Animal and Dog extends Animal. There are four possible relationships between Foo and Foo:
Foo and Foo as it does for Animal and Dog, so Foo is a sub type of Foo, which also means Foo is assignable to Footype CoVariant = () => T
declare var coAnimal: CoVariant
declare var coDog: CoVariant
coDog = coAnimal; //