2016-01-13 54 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的新手。我可以說,當運行時檢查超過必要的時候,肯定會出現這種情況,應該說,甚至是至關重要的。許多服務中使用的幫助程序方法傾向於從運行時檢查中受益。我通常檢查參數以防止濫用,從而防止調用堆棧中的錯誤。 –

相關問題