Closed
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: