E.g. you cannot have an interface and function which satisfy the types: ``` interface InterfaceA<U> function<U extends InterfaceA<V>>(value: U): U ``` This means you cannot make generic functions to handle derived types unless you are willing to lose the type information for the return value.