Typescript映射类型,不带右侧,wtf?

Typescript映射类型,不带右侧,wtf?,typescript,Typescript,我发现我的React组件有很多方法来切换状态布尔属性。 因此,由于这些函数都做相同的事情,我想创建一个通用函数来切换属性 每种方法都能做到这一点: toggleProperty(){ this.setState(上一个=>({ myProperty:!previous.myProperty })) } 因此,我提出了一个可以通过上下文调用的通用方法: /**筛选出B中不具有相同类型t的键**/ 类型筛选器输出不匹配类型={ [K in keyof B]:B[K]扩展T?K:从不; }[B的键

我发现我的React组件有很多方法来切换状态布尔属性。 因此,由于这些函数都做相同的事情,我想创建一个通用函数来切换属性

每种方法都能做到这一点:

toggleProperty(){
this.setState(上一个=>({
myProperty:!previous.myProperty
}))
}
因此,我提出了一个可以通过上下文调用的通用方法:


/**筛选出B中不具有相同类型t的键**/
类型筛选器输出不匹配类型={
[K in keyof B]:B[K]扩展T?K:从不;
}[B的键];
private StateToggler(此:配置程序,属性:FilterOutUnmatchedType){
此.setState((上一个)=>({
[属性]:!上一个[属性]
});
}
因此,我在这里所做的是,我希望在这个函数中只接受来自我状态的布尔属性。
FilterOutUnmatchedType
工作正常,但VSCode给了我以下错误:

Argument of type '(previous: Readonly<ConfiguratorState>) => { [x: string]: boolean; }' is not assignable to parameter of type 'ConfiguratorState | ((prevState: Readonly<ConfiguratorState>, props: Readonly<ConfiguratorProps>) => ConfiguratorState | Pick<...>) | Pick<...>'.
  Type '(previous: Readonly<ConfiguratorState>) => { [x: string]: boolean; }' is not assignable to type '(prevState: Readonly<ConfiguratorState>, props: Readonly<ConfiguratorProps>) => ConfiguratorState | Pick<...>'.
    Type '{ [x: string]: boolean; }' is not assignable to type 'ConfiguratorState | Pick<ConfiguratorState, (omitted, keyof ConfiguratorState - basically))>'.
      Type '{ [x: string]: boolean; }' is missing the following properties from type 'Pick<ConfiguratorState, (omitted, keyof ConfiguratorState - basically)>
所以,我所知道的这个语法属于映射类型……但我希望它有右边! 但是如果我添加像
ConfiguratorState[K]
这样的RHS,它就不起作用了。我无法解释它,但它似乎工作正常

谁能给我更多关于这是什么的信息,我在哪里可以找到更多关于这的信息,请?
非常感谢。

如果不提供右侧,则其类型暗示为
any
。因此,
{[K in keyof ConfiguratorState]}
相当于
{[K in keyof ConfiguratorState]:any}
记录
。请注意,启用
noImplicitAny
时,typescript将错误地抱怨隐含的
任何类型


非常感谢。那么,您认为有没有办法将这些道具标记为
ConfiguratorState
的一部分?