Open tinganho opened 8 years ago
I wonder whether it is doable after #11929 landed. We can use overload + tuple syntax to mock it.
Something like
interface Model<IInstance> {
findOne<K extends keyof IInstance>(options: [K]): { K: IInstance[K] };
findOne<K extends keyof IInstance, K1 extends keyof IInstance>(options: [K, K1]): { K: IInstance[K] } & {K1: IInstance[K1]};
// .... and more
}
If we have variadic kinds in #5453, maybe dynamic super type can be supported directly?
Also, K extends keyof T
seems to stand for one single string literal type to me. But in the return type it is used as a variadic kinds. May be ...K extends keyof T
is better?
Also, K extends keyof T seems to stand for one single string literal type to me. But in the return type it is used as a variadic kinds. May be ...K extends keyof T is better?
I stumbled upon this too. Though this problem might be a bit hard to solve perfectly.
Now, that #11929 is PR landed. I would really love to have some syntax to specify an arbitrary
super type of T
. This can be especially helpful in creating strongly typed ORM database frameworks.Proposal
If
K
is constrained to be a key ofT
i.eK extends keyof T
. Then the syntax:Means spread the keys
K
and values ofT
in{}
.Example
Here is an example usage of an envisioned ORM framework: