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.
