- Notifications
You must be signed in to change notification settings - Fork 13.2k
Closed
Labels
Design LimitationConstraints of the existing architecture prevent this from being fixedConstraints of the existing architecture prevent this from being fixed
Description
TypeScript Version: 4.0.5
Search Terms:
infer, object literals, interdependencies
Code
type Selector<S> = (state: S) => any export interface Reducer<T = any> { (state: T | undefined, action: any): T } type UnboxState<R extends Reducer> = R extends Reducer<infer U> ? U : never declare function example<R extends Reducer, S extends Selector<UnboxState<R>>>(r: R, s: S) : void example( (state, action) => ({ name: 'Gio Va' }), state => 23 ) declare function example2<R extends Reducer, S extends Selector<UnboxState<R>>>(x: { r: R, s: S }) : void example2({ r: (state, action) => ({ name: 'Gio Va' }), s: state => 23 })Expected behavior:
Infer type { name: string } to state in the example2 function as it does correctly in example function.
Actual behavior:
In the example2 function the type inferred to state is any.
Playground Link:
Related Issues:
Metadata
Metadata
Assignees
Labels
Design LimitationConstraints of the existing architecture prevent this from being fixedConstraints of the existing architecture prevent this from being fixed