Búsqueda de sitios web

reactjs - No se puede llamar a super() dentro de constructor() en typescript


Estoy intentando escribir una aplicación React con soporte de TypeScript usando el comando create-react-app --scripts-version=react-scripts-ts.

Sigo viendo este error:

(23,15): error TS2345: El argumento de tipo 'Props | undefined' no se puede asignar al parámetro de tipo 'Props'. Tipo 'undefined' no se puede asignar al tipo 'Props'.

El código de donde proviene esto es este:

export class ScratchpadComponent extends React.Component<ScratchpadComponent.Props, ScratchpadComponent.State> {

    constructor(props?: ScratchpadComponent.Props, context?: any) {
        super(props, context);
        this.submit = this.submit.bind(this);
    }

No estoy seguro de qué está causando esto; he buscado y no tengo mucha idea de cómo resolverlo.

Actualizar :

Si quito el ? opcional de la firma del constructor, entonces empiezo a ver este error:

18,11): error TS2322: Type '{}' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<Pick<Props, "dispatch" | "scratchPadActi...'.
  Type '{}' is not assignable to type 'Readonly<Pick<Props, "dispatch" | "scratchPadActions" | "scratchData" | "errorMessage" | "errorDa...'.
    Property 'dispatch' is missing in type '{}'.

Respuesta #1

El constructor de la superclase espera Props como su primer argumento. El constructor de la subclase se puede llamar sin ningún argumento, ya que lo declaraste como

constructor(props?: ScratchpadComponent.Props, context?: any)

y no como

constructor(props: ScratchpadComponent.Props, context?: any)

Entonces, si el llamador no pasa ningún argumento, entonces props es indefinido, y estás intentando pasar indefinido al constructor super, que no acepta indefinido.