我为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'中缺少。
我很好奇这里有什么问题。
答案 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>
}
如果有人有更惯用的解决方案,我会保持开放几天。