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 包。
