【发布时间】:2018-09-29 07:07:02
【问题描述】:
我正在寻找一种在打字稿中实现以下目标的方法: 我想强制方法的返回类型是接口的子集。因此,换句话说:返回对象的所有属性都必须存在于接口上,但并非所有属性都是必需的。
背景:react 的部分状态更新。
我刚刚遇到了一个错误,我重命名了 state 的一个属性,但忘记重命名 getDerivedStateFromProps 中的一个事件,因为 typescript 实际上并不知道它应该是相同的类型
例子:
interface IComponentState {
property1: string;
property2: number;
}
static getDerivedStateFromProps(
props: IComponentProps, state: IComponentState) : IComponentState {
if(some condition)
return { property1: 'foo'}; // valid
else
return { property3: 'bar'}; // invalid, property3 does not exist on IComponentState
}
我必须如何指定 getDerivedStateFromProps 的返回类型才能使其工作。
将IComponentState 中的所有属性标记为可选不是我想要的,我希望有另一种解决方案。
【问题讨论】:
-
除了使用 Partial
的建议之外,如果 IComponentState 确实是具有两个 optional 属性的对象,那么您应该简单地将这些属性设为可选:@987654325 @. -
@JBNizet:当然,但这里不是这样。
-
那么 Partial 是你应该使用的。您不能返回 IComponentState,因为它的属性不是可选的。
标签: reactjs typescript