расширить Ract Pure Component с помощью общего типа реквизита и типа состояния - PullRequest
0 голосов
/ 28 апреля 2018
// componet A
interface IPropsA {
  propsForA: boolean;
}

interface IStateA {
  isSleeping: boolean;  
};

class A<P extends IPropsA, S extends IStateA> extends React.PureComponent<P, S> {
    doStaff() {
      this.setState({ isSleeping: false });
    }
}

// componet B
interface IPropsB extends IPropsA {
   propsForB: string; 
};
interface IStateB extends IStateA{
  isWorking: boolean;  
};

class B extends A<bProps, bState> {
    doStaff() {
      this.setState({ isSleeping: false, isWorking: true });
    }
}

TS компилятор показывает ошибку

Class 'A<P, S>' incorrectly extends base class 'PureComponent<P, S>'.
Types of property 'state' are incompatible.
Type 'IStateA' is not assignable to type 'Readonly<S>'.

Как правильно расширить компонент A дополнительными свойствами в IStateB, чтобы компонент B работал?

Моя цель здесь - унаследовать все, что есть у компонента A, и расширить функциональность в B.

...