返回类型:需要特定类型的属性,但允许它是局部的

时间:2018-09-29 07:07:02

标签: reactjs typescript

我正在寻找一种实现打字稿中以下内容的方法: 我想强制方法的返回类型为接口的子集。因此,换句话说:返回对象的所有属性都必须存在于接口上,但并非所有属性都是必需的。

背景: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中的所有属性标记为可选不是我想要的,我希望有其他解决方案。

2 个答案:

答案 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

}