Extending React components in TypeScript Extending React components in TypeScript reactjs reactjs

Extending React components in TypeScript


You can set only a few properties of the state at once in Derived by using a type assertion:

this.setState({ b: 4 } as DerivedStates); // do thisthis.setState({ a: 7 } as DerivedStates); // or thisthis.setState({ a: 7, b: 4 });            // or this

By the way, no need to have different names for getInitialState... you could just do:

class GenericBase<S extends BaseStates> extends React.Component<void, S> {    constructor() {        super();                this.state = this.getInitialState();    }    protected getInitialState() {        return { a: 3 } as BaseStates as S;    }}class Derived extends GenericBase<DerivedStates> {    getInitialState() {        var initialStates = super.getInitialState();        initialStates.b = 4;        return initialStates;    }}


import { Component } from 'react'abstract class TestComponent<P = {}, S = {}, SS = any> extends Component<P, S, SS> {  abstract test(): string}type Props = {  first: string,  last: string,}type State = {  fullName: string,}class MyTest extends TestComponent<Props, State> {  constructor(props: Props) {    super(props)    this.state = {      fullName: `${props.first} ${props.last}`    }  }  test() {    const { fullName } = this.state    return fullName  }}