You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Method signatures containing references to properties of constrained generic types are resolving through the constraint instead of the supplied type argument #12651
I currently find it somewhat hard to precisely describe the issue/suggestion, but I believe this use case should demonstrate it clearly:
typeMethodDescriptor={name: string;args: any[];returnValue: any;}functiondispatchMethod<MextendsMethodDescriptor>(name: M['name'],args: M['args']): M['returnValue'];typeSomeMethodDescriptor={name: "someMethod";args: [number,string];returnValue: string[];}// Currently, there's no compilation error on the the invalid second argument type and the // return type is inferred as "any" instead of "string[]":letresult=dispatchMethod<SomeMethodDescriptor>("someMethod",["hello",35]);
The general idea here is that the types are used unconventionally: not to describe interfaces to run-time objects but as a way to "pack" a set of type arguments into an "object-like" compile-time entity. Perhaps this could be called something like "packed type arguments" or "type argument classes" or maybe "type argument schema containers"? I'm not sure.
Anyway, I was trying to write a general purpose dispatcher that can invoke a set of actions, and that seemed like a more elegant and type safe alternative to the more conventional:
functiondispatchMethod<Aextendsany[],R>(name: string,args: A): R;dispatchMethod<[number,string],string[]>("someMethod",["hello",35]);// <- errors as expected