Javascript 转换React项目时出现类型脚本错误

Javascript 转换React项目时出现类型脚本错误,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,这是我正在从标准ES2015转换为Typescript的React应用程序特有的。在我的.tsx文件(从常规的.js文件转换而来)中,我遇到了几个我不知道如何解决的typescript错误 第一个是:错误TS2339:类型“typeof App”上不存在属性“propTypes”。 这适用于: App.propTypes = { actions: PropTypes.object.isRequired, fuelSavingsAppState: PropTypes.object.isRe

这是我正在从标准ES2015转换为Typescript的React应用程序特有的。在我的.tsx文件(从常规的.js文件转换而来)中,我遇到了几个我不知道如何解决的typescript错误

第一个是:
错误TS2339:类型“typeof App”上不存在属性“propTypes”。

这适用于:

App.propTypes = {
  actions: PropTypes.object.isRequired,
  fuelSavingsAppState: PropTypes.object.isRequired
};
{settings.necessaryDataIsProvidedToCalculateSavings ? <FuelSavingsResults savings={settings.savings} /> : null}
我尝试在代码上方创建一个界面,定义应用程序,如:

interface App {
    propTypes?: any;
}
但这没有效果。很明显,我是打字新手,所以我遗漏了什么

另一个错误是:

error TS2605: JSX element type 'Element' is not a constructor function for JSX elements.
  Property 'render' is missing in type 'Element'
这适用于:

App.propTypes = {
  actions: PropTypes.object.isRequired,
  fuelSavingsAppState: PropTypes.object.isRequired
};
{settings.necessaryDataIsProvidedToCalculateSavings ? <FuelSavingsResults savings={settings.savings} /> : null}
然后有一个常规的React渲染方法,但我认为这无关紧要

错误TS2339:类型“typeof App”上不存在属性“propTypes”

而不是

class App extends React.Component{
}
App.propTypes = {
  actions: PropTypes.object.isRequired,
  fuelSavingsAppState: PropTypes.object.isRequired
};
使用
静态
属性

class App extends React.Component{
    static propTypes = {
      actions: PropTypes.object.isRequired,
      fuelSavingsAppState: PropTypes.object.isRequired
    };
}
错误TS2605:JSX元素类型“element”不是JSX元素的构造函数。 类型“Element”中缺少属性“render”


这是编译器中的一个bug,后来被修复了:Alternative为
props
提供类型注释 是否真的需要PropType?接口不会在编译时检查运行时检查哪些propTypes

interface IApp{
  actions:any;
  fuelSavingsAppState: (props:any)=> void;
}

class App extends React.Component<IApp,{}>{
}
接口IApp{
行动:任何;
fuelSavingsAppState:(道具:任意)=>无效;
}
类应用程序扩展了React.Component{
}
或者如果您使用的是哑组件

const App = ({actions,  fuelSavingsAppState }:IApp):React.ReactElement<{}> => (
  <div>
   What Ever you want to do with the props 
  </div>
)
const-App=({actions,fuelSavingsAppState}:IApp):React.ReactElement=>(
你到底想用这些道具做什么
)

注意:如果您正在使用对象,请为其创建一个接口。就像现在给出的任何操作一样,理想情况下都应该是一个接口。

最近解决了这个bug,这让我怀疑Typescript是否真的可以与React一起使用。你怎么认为?对于React来说,它还是太“beta”了吗?@Stuart我用它来构建这个:它的beta比React本身要少很多。我是Angular 2的新手。我可以说,在某些情况下,运行时检查是非常必要的,甚至是至关重要的。服务中使用的许多帮助器方法往往受益于运行时检查。我通常检查参数以防止其误用,从而防止调用堆栈中更深层次的错误。我尝试定义接口,它不会弹出错误,即使定义了错误的类型。TS将在传输文件时提供类型检查,并在运行时提供PropTypes。