@types/react-virtualized 打字产生 TS 错误
@types/react-virtualized typings are producing TS errors
我正在使用:
typescript 2.1.6
(虽然我也可以用 2.4.0 重现这个错误)
react 15.6.1
react-virtualized 9.9.0
@types/react-virtualized 9.7.3
TS 抱怨以下(示例)代码:
import * as React from "react";
import { List, ListRowProps } from "react-virtualized";
class TestComponent extends React.PureComponent<{}, {}> {
public render() {
return (
<List
width={300}
height={300}
rowCount={100000}
rowHeight={30}
rowRenderer={this.rowRenderer}
/>
);
}
private rowRenderer(props: ListRowProps) {
return <div
key={props.key}
style={props.style}
/>;
}
}
具体来说,它给了我这个错误:
error TS2605: JSX element type 'List' is not a constructor function for JSX elements.
值得注意的是,如果我直接进入并编辑 List.d.ts
,我可以通过更改来修复它:
export class List extends PureComponent<ListProps> {
到
export class List extends PureComponent<ListProps, {}> {
这对我来说很有意义,因为 PureComponent
的定义是
class PureComponent<P, S> extends Component<P, S> { }
即PureComponent
需要两个类型参数,因此 class 不能扩展 PureComponent<T>
但它可以扩展 PureComponent<T, {}>
.
我的假设是否正确? @types/react-virtualized
中是否存在因尝试扩展 PureComponent<ListProps>
而导致的错误?或者我使用的是这些软件包的不兼容版本?或者是否有我需要使用的 TypeScript 设置来允许这样做?
想通了!
我使用的是 @types/react
的过时版本。将其升级到最新版本解决了我的问题。
我正在使用:
typescript 2.1.6
(虽然我也可以用 2.4.0 重现这个错误)react 15.6.1
react-virtualized 9.9.0
@types/react-virtualized 9.7.3
TS 抱怨以下(示例)代码:
import * as React from "react";
import { List, ListRowProps } from "react-virtualized";
class TestComponent extends React.PureComponent<{}, {}> {
public render() {
return (
<List
width={300}
height={300}
rowCount={100000}
rowHeight={30}
rowRenderer={this.rowRenderer}
/>
);
}
private rowRenderer(props: ListRowProps) {
return <div
key={props.key}
style={props.style}
/>;
}
}
具体来说,它给了我这个错误:
error TS2605: JSX element type 'List' is not a constructor function for JSX elements.
值得注意的是,如果我直接进入并编辑 List.d.ts
,我可以通过更改来修复它:
export class List extends PureComponent<ListProps> {
到
export class List extends PureComponent<ListProps, {}> {
这对我来说很有意义,因为 PureComponent
的定义是
class PureComponent<P, S> extends Component<P, S> { }
即PureComponent
需要两个类型参数,因此 class 不能扩展 PureComponent<T>
但它可以扩展 PureComponent<T, {}>
.
我的假设是否正确? @types/react-virtualized
中是否存在因尝试扩展 PureComponent<ListProps>
而导致的错误?或者我使用的是这些软件包的不兼容版本?或者是否有我需要使用的 TypeScript 设置来允许这样做?
想通了!
我使用的是 @types/react
的过时版本。将其升级到最新版本解决了我的问题。