代码之家  ›  专栏  ›  技术社区  ›  Daniel Hilgarth Richard

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

  •  0
  • Daniel Hilgarth Richard  · 技术社区  · 6 年前

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


    我只是有一个错误,我重命名了一个属性的状态,但忘了重命名一个发生在 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 由于可选不是我要找的,我希望有另一个解决方案。

    2 回复  |  直到 6 年前
        1
  •  2
  •   unional    6 年前

    你是说使用 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
    
    }
    
        2
  •  0
  •   Daniel Hilgarth Richard    6 年前

    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
    
    }