网站搜索

reactjs - TS2339:在迁移到 TypeScript 时,类型 ‘typeof React’ 上不存在属性 ‘PropTypes’


我目前正在将一个 JavaScript/React 项目转换为 TypeScript/React/Redux 项目。

我目前在处理这个文件时遇到了问题:

import React from 'react';
import GoldenLayout from 'golden-layout';
import {Provider} from 'react-redux';
import Default from '../modules/m-Default/Default';

interface GoldenLayoutWrapperProps {}

interface GoldenLayoutWrapperState {}

class GoldenLayoutWrapper extends React.Component <GoldenLayoutWrapperProps, GoldenLayoutWrapperState> {

    public layout;
    static contextTypes = {
        store: React.PropTypes.object.isRequired
    };

    private wrapComponent(Component, store) {
        class Wrapped extends React.Component {
            render () {
                return (
                    <Provider store={store}>
                        <Component {...this.props}/>
                    </Provider>
                )
            }
        }
        return Wrapped;
    }

    componentDidMount() {
        var layout = new GoldenLayout(this.layoutConfig, this.layout);

        layout.registerComponent('Default', this.wrapComponent(Default, this.context.store));
    }

    render() {
        return (
            <div className="golden-layout-wrapper" ref={input => this.layout = input}/>
        )
    }

    private layoutConfig = {}
}

   export default GoldenLayoutWrapper;

当我尝试编译时,我收到以下错误:

ERROR in [at-loader] ./src/main/GoldenLayoutWrapper.tsx:18:22 
TS2339: Property 'PropTypes' does not exist on type 'typeof React'.

经过一些搜索,有些人建议给 contextTypes 添加一个静态修饰符,我尝试过了,但问题仍然存在。

可能出了什么问题?

答案#1

由于您正在使用 React v16.0.0,自 React v15.5 起,prop-types 被视为一个独立的库,因此您需要使用它

你可以通过 npm 将其作为项目依赖项进行安装

npm install --save prop-types

然后在你想使用它的组件内部:

import PropTypes from 'prop-types'; // ES6

你可以直接使用 PropTypes,而不是 React.PropTypes

你可以在这里阅读更多关于 prop-types 的内容

答案#2

在这里查看我的答案以获取完整详情:无法读取未定义的属性 'string' | React.PropTypes | LayoutPropTypes.js

简而言之,从 React v15.5 开始,React.PropTypes 已被弃用。你需要从 npm 安装 prop-types 包。

相关文章