Typescript自定义类型声明出错

时间:2016-12-26 12:06:40

标签: reactjs generics typescript

我为r-dom编写了以下类型声明:

/// <reference types="react" />

declare module 'r-dom' {

    interface IRDOMFacade extends React.ReactDOM {
        (component: React.Component<any, any>, properties?: Object, children?: React.ReactElement<any>|Array<React.ReactElement<any>>): React.ReactElement<any>
    }

    var r: IRDOMFacade

    export = r
}

示例组件:

import * as React from 'react'
import * as r from 'r-dom'

export default class Application extends React.Component<{},{}> {

  render() {
      return r.h1('Hello World')
  }

}

上述组件没有类型错误。但是当我尝试使用r作为函数时,我得到类型错误:

r(Application)
  

错误TS2345:类型'typeof Application'的参数不可分配   到“组件”类型的参数。属性'setState'是   类型'typeof Application'中缺少。

我很好奇这里有什么问题。

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为r的第一个参数是一个具有签名React.Component<any, any>的类/构造函数,而不是React.Component<any, any>的实例。

因此,切换到以下内容可修复错误:

interface IRDOMFacade extends React.ReactDOM {
    (
        component: new (...args: any[]) => React.Component<any, any>, 
        properties?: Object, 
        children?: React.ReactElement<any>|Array<React.ReactElement<any>>
    ): React.ReactElement<any>
}

如果有人有更惯用的解决方案,我会保持开放几天。