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