对你来说,TypeScript所知道的是它获取了一些东西,并返回了一些带有bprop的东西!initialState的使用是在调用applyReducer完成之后,不会从中推断出类型。这样会失去类型安全性。例如,尝试返回({…state,b:''})。这应

对你来说,TypeScript所知道的是它获取了一些东西,并返回了一些带有bprop的东西!initialState的使用是在调用applyReducer完成之后,不会从中推断出类型。这样会失去类型安全性。例如,尝试返回({…state,b:''})。这应,typescript,Typescript,对你来说,TypeScript所知道的是它获取了一些东西,并返回了一些带有bprop的东西!initialState的使用是在调用applyReducer完成之后,不会从中推断出类型。这样会失去类型安全性。例如,尝试返回({…state,b:''})。这应该会给出一个错误,但事实并非如此。@JeffreyWesterkamp你是对的。我会设法解决的it@JeffreyWesterkamp我已经修好了谢谢你的回答!这在某些方面是一种改进,但不幸的是,这种改进对我来说并不重要:能够推断出state属


对你来说,TypeScript所知道的是它获取了一些东西,并返回了一些带有
b
prop的东西!
initialState
的使用是在调用
applyReducer
完成之后,不会从中推断出类型。这样会失去类型安全性。例如,尝试返回
({…state,b:''})
。这应该会给出一个错误,但事实并非如此。@JeffreyWesterkamp你是对的。我会设法解决的it@JeffreyWesterkamp我已经修好了谢谢你的回答!这在某些方面是一种改进,但不幸的是,这种改进对我来说并不重要:能够推断出
state
属于reducer定义中的
state
类型。我需要能够在函数中使用
state
,例如
state=>{……state,b:state.b+1}
。我已经更新了OP.@RaineRevere请看一看这个问题:这个答案也许smbd-else能够回答这个问题。这样你就失去了类型安全性。例如,尝试返回
({…state,b:''})
。这应该会给出一个错误,但事实并非如此。@JeffreyWesterkamp你是对的。我会设法解决的it@JeffreyWesterkamp我已经修好了谢谢你的回答!这在某些方面是一种改进,但不幸的是,这种改进对我来说并不重要:能够推断出
state
属于reducer定义中的
state
类型。我需要能够在函数中使用
state
,例如
state=>{……state,b:state.b+1}
。我已经更新了OP.@RaineRevere请看一下这个问题:这个答案也许smbd-else能够回答它谢谢你的解释。这似乎是Typescript中的一个bug
fn
确实没有足够的类型信息来推断
state
的类型,但是
fn(…)(initialState)
在编译时具有
initialState
的类型。类似地,
(x:T)=>x
本身无法推断
x
的类型,但可以在
((x:T)=>x)(10)
中,即
x
可以在调用表达式的后面从参数提供程序中推断出来。对于咖喱函数,它不能做同样的事情。谢谢你的解释。这似乎是Typescript中的一个bug
fn
确实没有足够的类型信息来推断
state
的类型,但是
fn(…)(initialState)
在编译时具有
initialState
的类型。类似地,
(x:T)=>x
本身无法推断
x
的类型,但可以在
((x:T)=>x)(10)
中,即
x
可以在调用表达式的后面从参数提供程序中推断出来。对于curry函数,它无法执行相同的操作。
const fn = applyReducer((state) => ({ ...state, b: 2 }))
//                                    ^^^^^^^^ error (because you can't spread 'unknown')
//
// const fn: (state: unknown) => unknown
const fna = applyReducer<State>((state) => ({ ...state, b: 2 }))
const fnb = applyReducer((state: State) => ({ ...state, b: 2 }))