【发布时间】:2021-11-11 21:03:20
【问题描述】:
我有这样的代码:
export type Subscribe<T extends object> = <U>(
listener: (slice: U) => void,
selector: (state: T) => U,
) => void
// implementation doesn't matter
const subscribe = {} as Subscribe<{ value: number }>
subscribe(
(value) => value * 2, // ts error: object is of type unknown
(state) => state.value
)
似乎不可能用 typescript 以这种方式推断类型
但如果我改变参数的顺序,它就可以正常工作:
export type Subscribe<T extends object> = <U>(
selector: (state: T) => U,
listener: (slice: U) => void,
) => void
const subscribe = {} as Subscribe<{ value: number }>
subscribe(
(state) => state.value,
(value) => value * 2 // now no error! number type is inferred
)
我希望selector 成为第二个参数以使其成为可选,请告诉我这是不可能的或者你是否知道方法
【问题讨论】:
标签: typescript generics type-inference