2016-01-13 53 views
2

这是特定于我将从标准ES2015转换为Typescript的React应用程序。在我的.tsx文件(从常规的.js文件转换而来)中,我收到了几个打字稿错误,我不知道如何解决。转换React项目时的Typescript错误

第一个是:error TS2339: Property 'propTypes' does not exist on type 'typeof App'.

适用于:

App.propTypes = { 
    actions: PropTypes.object.isRequired, 
    fuelSavingsAppState: PropTypes.object.isRequired 
}; 

我试图创建一个以上代码的接口定义的应用程序,如:

interface App { 
    propTypes?: any; 
} 

但是,这并没有影响。很显然,我对Typescript很陌生,所以我错过了什么?

其他错误是:

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

这适用于:

{settings.necessaryDataIsProvidedToCalculateSavings ? <FuelSavingsResults savings={settings.savings} /> : null} 

错误具体是指一些关于<FuelSavingsResults

完全茫然到哪里,甚至从那开始。任何建议是最受欢迎的。


的情况下,它可以帮助,为FuelSavingsResults的定义开始,如:

let FuelSavingsResults = (props) => { 
    let savingsExist = NumberFormatter.scrubFormatting(props.savings.monthly) > 0; 
    let savingsClass = savingsExist ? 'savings' : 'loss'; 
    let resultLabel = savingsExist ? 'Savings' : 'Loss'; 

,然后有一个遵循规律阵营渲染方法,但我不认为这会事。

回答

10

错误TS2339:'typeof App'类型中不存在属性'propTypes'。

而不是

class App extends React.Component{ 
} 
App.propTypes = { 
    actions: PropTypes.object.isRequired, 
    fuelSavingsAppState: PropTypes.object.isRequired 
}; 

使用static属性。

class App extends React.Component{ 
    static propTypes = { 
     actions: PropTypes.object.isRequired, 
     fuelSavingsAppState: PropTypes.object.isRequired 
    }; 
} 

错误TS2605:JSX元素类型 '元素' 不是JSX元件一个构造函数。 住宅“渲染”缺失型“元素”

这是在编译器中的错误已被修复:https://github.com/Microsoft/TypeScript/issues/6349替代计划props提供类型注释。

+0

这个错误最近被解决了,它让我想知道它的Typescript真的准备好用于React。你怎么看?对于React,它仍然是“测试版”吗? – Stuart

+0

@Stuart我正在用它来构建它:http://alm.tools/它的测试不如React本身错误大多是TypeScript提供*更多的帮助*,否则它将*完全不存在并被忽略直到运行时*。 – basarat

3

propTypes是否真的需要?不会在编译时检查运行时检查的propType类型吗?

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

class App extends React.Component<IApp,{}>{ 
} 

,或者如果您使用的是哑巴部件

const App = ({actions, fuelSavingsAppState }:IApp):React.ReactElement<{}> => (
    <div> 
    What Ever you want to do with the props 
    </div> 
) 

注:如果您使用的对象,请使用同一个接口。就像现在给出的行为一样,它应该是理想的接口。

+0

我是来自Angular 2的React的新手。我可以说,当运行时检查超过必要的时候,肯定会出现这种情况,应该说,甚至是至关重要的。许多服务中使用的帮助程序方法倾向于从运行时检查中受益。我通常检查参数以防止滥用,从而防止调用堆栈中的错误。 –

相关问题