【发布时间】:2016-08-07 21:51:31
【问题描述】:
尝试在我的 typescript 应用程序中使用 react-collapse (repository) 组件和自制 d.ts 文件时出现以下错误:
警告:React.createElement:类型不应为 null、未定义、布尔值或数字。它应该是一个字符串(对于 DOM 元素)或一个 ReactClass(对于复合组件)。
和
未捕获的不变违规:元素类型无效:需要一个字符串(对于内置组件)或一个类/函数(对于复合组件),但得到:未定义。
index.d.ts:
declare namespace ReactCollapse {
export class Collapse extends __React.Component<any, any> { }
}
declare module "react-collapse" {
export = ReactCollapse;
}
来自 react-collapse 的原始 index.js:
'use strict';
const Collapse = require('./Collapse').default;
module.exports = Collapse;
应用代码:
import { Collapse } from 'react-collapse';
const render = () => {
ReactDOM.render(
<Collapse isOpened={true}>One</Collapse>,
document.getElementById('test-container')
);
}
render();
我使用的是 typescript 1.8.10,redux-collapse 是通过 npm 安装的,tsc 使用 commonjs 生成。应用程序是使用 webpack 构建的。我很确定,我的 .d.ts 文件中有错误,但我就是想不通。
更新 1:
尝试像 Hunter 建议的那样为打字添加渲染方法,所以现在打字看起来像这样:
declare namespace ReactCollapse {
export class Collapse extends __React.Component<any, any> {
public render(): JSX.Element;
}
}
declare module "react-collapse" {
export = ReactCollapse;
}
但我仍然遇到同样的错误。
更新 2:
不知何故,我设法通过下一次输入和模块解析调用来修复错误:
index.d.ts:
declare class Collapse extends __React.Component<any, any> {}
declare module "react-collapse" {
export = Collapse;
}
代码:
import Collapse = require('react-collapse');
const render = () => {
ReactDOM.render(
<Collapse isOpened={true}>One</Collapse>,
document.getElementById('test-container')
);
}
render();
但是,问题是 - 这是一个随机猜测,我不明白它为什么会起作用。那么,也许有人可以解释一下吗?
【问题讨论】:
标签: reactjs typescript