Javascript 转换React项目时出现类型脚本错误
这是我正在从标准ES2015转换为Typescript的React应用程序特有的。在我的.tsx文件(从常规的.js文件转换而来)中,我遇到了几个我不知道如何解决的typescript错误 第一个是: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
错误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。