做者:Marius Schulz
譯者:前端小智
來源: https://mariusschulz.com/
點贊再看,養成習慣本文
GitHub
https://github.com/qq44924588... 上已經收錄,更多往期高贊文章的分類,也整理了不少個人文檔,和教程資料。歡迎Star和完善,你們面試能夠參照考點複習,但願咱們一塊兒有點東西。前端
TypeScript 2.4 爲標識符實現了拼寫糾正機制。即便我們稍微拼錯了一個變量、屬性或函數名,TypeScript 在不少狀況下均可以提示正確的拼寫。react
TypeScript 2.5 實現了可選的 catch
綁定建議,該建議更改了 ECMAScript 語法,以容許在 catch
子句中省略變量綁定。 也就是說,我們如今能夠在try/catch
語句中忽略錯誤變量及其周圍的括號:git
try { // ... } catch { // ... }
之前,即便不使用變量,也必須始終聲明它:github
try { // ... } catch (error) { // ... }
若是你的目標ECMAScript版本不支持可選的catch
綁定(好比 ES5
或 ES2015
),那麼TypeScript 編譯器將爲每一個catch
子句添加一個變量綁定,這樣生成的代碼在語法上就有效了。面試
生成前:typescript
try { // ... } catch { // ... }
下面當我們以ES5
爲目標時 TypeScript 編譯器生成的 JS 代碼:微信
try { // ... } catch (_a) { // ... }
若是改成使用--target esnext
來編譯代碼,則生成的不帶變量綁定的catch
子句將不變:函數
try { // ... } catch { // ... }
catch
綁定的用例一般,我們不但願忽略應用程序中的錯誤。至少,但願將它們打印到控制檯。然而,在一些罕見的狀況下,可能根本不須要 catch
變量綁定。工具
假設我們試圖將一個錯誤記錄到控制檯,而後因爲某種緣由,日誌代碼自己會致使另外一個錯誤。咱不但願日誌代碼拋出錯誤,因此在這種狀況下,沒有綁定的catch
子句多是有意義的spa
function log(error) { try { console.error(error); } catch { // There's not much more we can do } }
TypeScript 2.6 添加了對JSX
片斷的支持。 在.tsx
文件中,如今可使用新的<> ... </>
語法來建立片斷。
在React
中,從一個組件返回多個元素是一種常見模式。例如,假設我們但願在如下組件中渲染多個列表項:
class List extends React.Component { render() { return ( <ul> <ListItems /> <li>Item 3</li> </ul> ); } }
然而,在我們的ListItems
組件中,我們不能像這樣簡單地返回多個相鄰的JSX
元素
class ListItems extends React.Component { render() { return ( <li>Item 1</li> <li>Item 2</li> ); } }
相鄰的JSX
元素必須包裹在一個封閉的元素中,所以我們能夠添加一個div
元素
class ListItems extends React.Component { render() { return ( <div> <li>Item 1</li> <li>Item 2</li> </div> ); } }
不幸的是,添加這樣的包裝器會破壞列表的結構。我們的ListItems
組件當前渲染如下DOM
元素
<ul> <div> <li>Item 1</li> <li>Item 2</li> </div> <li>Item 3</li> </ul>
注意,<div>
不屬於這裏,我們能夠經過使用JSX
片斷語法來消除它:
class ListItems extends React.Component { render() { return ( <> <li>Item 1</li> <li>Item 2</li> </> ); } }
片斷容許我們對多個JSX
元素進行分組,而不須要添加額外的節點。如今,List
組件渲染結構就正常了:
<ul> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> </ul>
另外,也能夠寫React.Fragment
來代替新的JSX語法:
class ListItems extends React.Component { render() { return ( <React.Fragment> <li>Item 1</li> <li>Item 2</li> </React.Fragment> ); } }
下面帶有新的JSX
語法的ListItems
組件
class ListItems extends React.Component { render() { return ( <> <li>Item 1</li> <li>Item 2</li> </> ); } }
若是我們使用--jsx react
(和--target es2015
)編譯.tsx
文件,會生成下面的 JS 代碼:
class ListItems extends React.Component { render() { return ( React.createElement( React.Fragment, null, React.createElement("li", null, "Item 1"), React.createElement("li", null, "Item 2") ) ); } }
編譯器經過調用 React.createElement()
方法來替換片斷語法,並將其React.Fragment
做爲第一個參數傳遞。
若是使用--jsx preserve
(和--target es2015
)來編譯ListItems
組件,那麼生成的代碼就不會有變化:
class ListItems extends React.Component { render() { return ( <> <li>Item 1</li> <li>Item 2</li> </> ); } }
代碼部署後可能存在的BUG無法實時知道,過後爲了解決這些BUG,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug。
原文:
https://mariusschulz.com/blog...
https://mariusschulz.com/blog...
文章每週持續更新,能夠微信搜索「 大遷世界 」第一時間閱讀和催更(比博客早一到兩篇喲),本文 GitHub https://github.com/qq449245884/xiaozhi 已經收錄,整理了不少個人文檔,歡迎Star和完善,你們面試能夠參照考點複習,另外關注公衆號,後臺回覆福利,便可看到福利,你懂的。