[英]Typescript with React - use HOC on a generic component class
[英]Extend and use a generic class in Typescript
在React Typescript项目中,我试图使用基类组件,并在State中使用额外的属性对其进行扩展。
如果我天真地将其从
class ErrorBoundaryW extends PureComponent<any, State> {...}
至
class ErrorBoundaryW<SunState = {}> extends PureComponent<any, State & SunState> {...}
我该如何实现?
我知道,除了扩展React的本机Component和PureComponent [source]之外,在继承中使用继承是不受欢迎的。 但这是一种特殊情况,是一个例外,也是我唯一扩展自定义React类Component的情况。
Typescript绝不会让您将具有具体类型的对象分配给具有type参数的对象。 作为这有问题的一个示例,编译器无法检查类型参数的所有必需属性是否存在于具体类型中,因为尚未知道类型参数的最终类型。 SunState
可以为{ newProp: string }
因此state
应具有此属性,但是对象文字不具有此属性。
一种选择是使用抽象类,并具有创建子状态的抽象方法:
type State = {
hasError: boolean
}
abstract class ErrorBoundaryW<SunState = {}> extends PureComponent<any, State & SunState> {
constructor(props: any) {
super(props);
this.state = Object.assign(this.childState(), {
hasError: true
});
}
abstract childState(): SunState
}
发生此错误是因为this.state
可能是任何可能的类型–您类中的代码无法知道SunState
添加了哪些其他属性,因此无法安全地将任何值分配给this.state
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.