Decorador de componente React en Typescript
Podría ser un error de principiante, pero estoy tratando de crear un decorador de clase simple usando TypeScript para un componente de React, así:
import * as React from 'react'
interface Greeter {
sayHello: boolean
}
const greet = (arg: Greeter) => (Comp: React.Component) => {
// do some stuff
}
@greet({ sayHello: true })
class MyComp extends React.Component<any, any> {
render() {
return <div>Hi</div>
}
}
Pero estoy recibiendo un error de compilación que dice
El argumento de tipo 'typeof MyComp' no se puede asignar al parámetro de tipo 'Component<{}, {}>'.
¿Qué exactamente estoy haciendo mal aquí? ¿Me está faltando algo con la sintaxis del decorador?
Respuesta #1
Dado que estás pasando la clase a greet, en lugar de un objeto de esa clase, añade un typeof:
const greet = (arg: Greeter) => (Comp: typeof React.Component) => {
// do some stuff
}
Respuesta #2
No estoy seguro de cuándo se agregó esto, pero en versiones más recientes de @types/react también puedes hacer React.ComponentType, por ejemplo.
const greet = (arg: Greeter) => (Comp: React.ComponentType) => {
// do some stuff
}
