-
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