2017-02-04 1360 views
6

這段代碼的參數:參數類型「元素」是不能分配給類型「ReactElement <any>

error TS2345: Argument of type 'Element' is not assignable to parameter of type 'ReactElement<any>'. 
    Type 'null' is not assignable to type 'ReactElement<any> 

這隻:

import * as React from 'react';                        

const Component =() => <div/>;             

function culprit<P>(node: React.ReactElement<P>) { 
    console.log(node); 
} 

culprit(<Component/>); 

...與打字稿編譯時會產生這個編譯錯誤發生在strictNullChecks TypeScript編譯標誌設置爲true

是的,我可以禁用該標誌,但我希望它增加編譯時檢查/安全。

如果我改變最後一行是:

culprit((<Component/> as React.ReactElement<any>)); 

...它的工作原理與設置爲true標誌。

我最近嘗試從React項目中將「純」JavaScript轉換爲TypeScript,並且這會跳過我所有的測試,因此將所有TypeScript類型斷言添加到測試代碼中的所有這些事件中將會很痛苦。

這是一個錯誤,還是我沒有別的選擇?

回答

9

這顯然是在15.0.5 React類型定義中引入的一個問題。如果你改爲15.0.4,一切都應該沒問題。

看到這個問題:https://github.com/DefinitelyTyped/DefinitelyTyped/pull/14284

+0

我已經試過'@類型/ react'版本15.0.6,15.0.4,15.0.0和他們都仍然產生了我的問題,很遺憾。 – pleasedesktop

+0

版本0.14.57的作品,但那是在與'| | null「被引入(這是你似乎一直試圖讓我)。然而,React應該允許渲染函數返回null,所以我不認爲React類型定義是錯誤的,我認爲所有不允許'null'的類型定義都需要更新。我從Enzyme.js中獲得了這個「罪魁禍首」函數簽名,因此它的類型定義將需要更新。 – pleasedesktop

+0

15.0.4解決了我的問題,但我想你必須做一些不同的事情(或者在你的設置中有不同的東西)。 –

相關問題