我正在寻找一种实现打字稿中以下内容的方法: 我想强制方法的返回类型为接口的子集。因此,换句话说:返回对象的所有属性都必须存在于接口上,但并非所有属性都是必需的。
背景:react的部分状态更新。
我只是遇到了一个错误,在这里我重命名了状态的属性,但是却忘记了重命名getDerivedStateFromProps
中的一个实例,因为打字稿实际上并不知道它应该是同一类型
示例:
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
中的所有属性标记为可选不是我想要的,我希望有其他解决方案。
答案 0 :(得分:2)
您是说使用Partial<T>
吗?
interface IComponentState {
property1: string;
property2: number;
}
function getDerivedStateFromProps(props, state: IComponentState): Partial<IComponentState> {
if (props)
return { property1: 'foo' }; // valid
else
return { property3: 'bar' }; // invalid, property3 does not exist on IComponentState
}
答案 1 :(得分:0)
解决方案是使用Partial<T>
:
static getDerivedStateFromProps(
props: IComponentProps, state: IComponentState) : Partial<IComponentState> {
if(some condition)
return { property1: 'foo'}; // valid
else
return { property3: 'bar'}; // invalid, property3 does not exist on IComponentState
}