打字稿反应组件装饰器

时间:2017-10-25 17:26:56

标签: typescript decorator

这可能是一个新手的错误,但我正在尝试使用typescript为React组件创建一个简单的类装饰器,如下所示:

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>
  }
}

但我收到编译错误

  

类型'typeof MyComp'的参数不能赋值给   输入'Component&lt; {},{}&gt;'。

我到底错在了什么?我错过了装饰器语法的东西吗?

2 个答案:

答案 0 :(得分:2)

当您将课程传递给greet时,而不是该课程的对象,请添加typeof

const greet = (arg: Greeter) => (Comp: typeof React.Component) => {
  // do some stuff
}

答案 1 :(得分:0)

我不确定何时添加它,但是在@types/react的较新版本中,您也可以执行React.ComponentType,例如

const greet = (arg: Greeter) => (Comp: React.ComponentType) => {
  // do some stuff
}