I want to define a generic type KeyOfType<T, U> to be the (widest) type K satisfying T[K] extends U.
For example:
interface Foo {
a: number
b: number
c: string
d: 1 | 2
e: number | string
}
In this case, KeyOfType<Foo, number> should be 'a' | 'b' | 'd', since these are the keys of Foo whose values are assignable to number.
Is this possible?