如何學慣用Typescript寫Reactjs?

有哪些比較好的教程?


首先掃盲一下,先從搭建環境開始:

1.安裝node,因為ts的編譯器是js/ts寫的;

安裝node後同時獲得npm命令,這是nodejs世界裡的包管理器(也可以看作node的app商店);

2.安裝vs 2015或者vs code,當然這不是必須的,但是這裡強烈推薦寫ts的工具,vs第一,vsc第二;

3.vs自帶了TypeScript(vs2012+,vs2015update1自帶了ts1.7),最新版本的typescript for vs去官網下載即可, 或者如果不依賴vs(比如mac環境), 可以用命令行裝ts編譯器

npm i -g typescript@next

4. 安裝了ts後, 就會有2個命令可用:tsc和tsd, tsc用來編譯TypeScript代碼, tsd用來下載第三方js類庫的ts定義文件(或者叫頭文件),熟練使用tsd,工作效率提升,因為減少了80%查文檔的時間,所以寫ts可以說是jser打通了任督二脈,上手任何新的開發環境都很快;

有網友指正tsd工具不是安裝ts的時候自帶的,需要另外安裝,裝太久不記得了。

npm install tsd -g5. 命令行下載react的ts頭文件,

tsd install react-global --save

注意上面之所以寫 react-global 而不是react, 因為我們接下來使用比較原始的寫法,直接把React當作全局對象使用, 而不作為es6模塊(必須用import引入),不需要Babel編譯也不需要webpack打包;

上面執行的tsd命令下載了ReactJS類庫的頭文件, 下面用tsc命令創建一個ts項目配置文件

tsc --init

命令創建了tsconfig.json配置文件, 打開該文件

增加"jsx": "react", 就是自動把tsx變成最終的js, 而不是jsx

把"outDir": "built", 這行去掉,這樣編譯的文件就會在當前目錄輸出

"target": "es5", 這裡es3改成es5,

"watch": true 是否監聽文件修改 如果你用的是vs,這行不重要

6.下載reactjs文件,如果沒有安裝bower命令,可以手動去官網下載react類庫

bower install --save react

7.以上環境配置好了, 開始寫代碼:

創建一個demo.tsx文件(注意這裡是tsx, 不是ts也不是jsx)

創建一個demo.html, 添加文件的引用

&
&
&
&

tsc

tsc命令會自動根據tsconfig.json裡面配置的情況, 自動幫你把代碼編譯成js, 這是編譯後的js文件

10. 打開demo.html可以看到效果了;

11. 至於題主說怎麼學習, 其實跟JS完全沒兩樣, 上面demo.tsx的代碼, 跟react官網的es6寫法一模一樣多了& 這兩個prop和states類型約束, 僅此而已;

12. 下班, 有空再寫;

------時間分割------

13、繼續寫,對1-12進行潤色,轉入傳教模式;妖獸啦,這裡14-15的文字怎麼不不見了,知乎編輯器bug好多。

不記得寫了什麼,大概說的是 工廠方法創建子類和用class直接繼承的差異。

React.createClass 和 Backbone.View.extend 等都是工廠方法創建子類

文字斷了。。。。

以上的代碼,工廠方法在創建子類的同時,做了一些初始化的動作,這與單純的原型繼承不同,所以在使用class方式進行子類繼承,這樣的寫法是無效的;

class MyView extends React.Component {
render() {
return &hello {this.state.name}&; //會拋異常,因為state是null
}
//不起作用的
getInitialState:(){
return {name:"",age:20};
}
}

需要改成如下方式,下面是官網給出的方案(這裡TypeScript和ES6情況是一樣的)

class MyView extends React.Component {
constructor(props, context) {
super(props, context);

this.state = {
name: "",
};
}
render() {
return &hello {this.state.name}&;
}
}

16、當組件化遇到強類型:

從前寫JS組件,一般復用性比較差,基本寫完就仍,原因如下:

1)暴露了太多的Dom結構以及別的實現細節;

2)命名挫,缺乏可記憶性,本身編程中變數和方法的命名對於碼農來說就是天坑;

3)JS天生缺乏私有和公共成員的約束,不加註釋根本不知道怎麼使用該類庫/組件;

React解決了把dom標籤暴露出去的問題,TS則解決了語言層面的問題,並提供了強大的重構能力,你根本不需要記住組件的API,因為工具會列出來;

待續...下面會配上實例。

-----------------時間軸 到2016-01-05-------------------

17、強類型的ts有IDE的代碼提示,但是面對各種mvvm的字元串模版組裝,卻無用武之地,以下是典型的mvvm數據綁定和有IDE支持的JSX數據組裝在開發體驗上的區別;

模板字元串的綁定里,工具無法檢查出問題,只能在運行時拋出異常,而jsx則可以提示拼寫錯誤。

18、關於生產力再拋一個概念:無障礙編程;

我們平時的開發工作,有不少時間花在查API文檔、調試代碼、查字典(給變數命名),需要不停地切換任務窗口……

上面的例子比較小,實際開發中各種JSON對象可能有10來個屬性,且結構層層嵌套,不一邊查文檔一邊抓包,根本無法完成開發;

如果項目是並行開發的,文檔都還沒定義出來(但是產品原型已經有了,甚至html頁面都已經切好),如何快速完成前端部分的開發工作?

業界常用方法是使用mock數據(先造假數據),下面介紹一種更簡單的辦法(為了舉例先虛擬一個需求場景 —— 一個留言板html的組裝);

別忘了JS變數是可以用中文的,好吧不用查字典了,先把需求完成再說,在組裝html的過程中TS+JSX發揮了巨大的優勢,三下五除二就把組裝界面的代碼寫好了,不用調試我可以確定沒有錯誤的;

過了些天,WebAPI的數據結構定義出來了,可以著手進行代碼重構(或者說把查字典的工作集中完成),利用開發工具的重構功能進行變數改名:

最後項目完成的時候,是把所有類型的定義都挪到獨立的描述文件里(比如叫做webapi.d.ts),原來的interface可以改成type關鍵字(類型別名):

以上,這個開發過程中基本沒有一邊查文檔、一邊查字典,效率的提升是明顯的。待續,後面主要會寫:

JSX與TS結合,使得在JS開發視圖下獲得html自動補全的支持;開發一套自定義的標記語言並能投入生產,曾經是每個開發人員都有的「夢想」,有了TSX,那麼這個「夢想」則離現實更近一步了。

自己開發和維護的組件項目,擁有良好的文檔和介面封裝、命名,則項目越有生命力,所以開發工具的輔助可以使JS組件流通性大大增強........


說一些小細節吧。

- 用@types去安裝react的聲明文件後,可能會發現 ` import React from "react" ` 會報一個沒有默認導出的錯,你需要在tsconfig.json裡面新增一條` "allowSyntheticDefaultImports":true `的配置。tsx解析出錯的話記得` "jsx":"react" `的配置。

- typescript配合react的話,**不需要**proptypes,typescript的類型檢查比他強多了……

- 如果使用redux的話,為state建立一個類型聲明會讓你方便很多,記得盡量減少對象層級嵌套,不僅僅在使用typescript時方便,而且本身也是最佳實踐。

- redux的connect可以當作裝飾器使用。如果不追求pure function的話,類繼承的寫法可能會很漂亮。

- 如果使用webpack,可以考慮用` awesome-typescript-loader `,據說比` ts-loader `好(但是我沒試過)。

終極技巧:如果可以自由選型、又是個稍重的項目,先去試試Angular……(逃


Fula Li 寫得很全了, 我想補充幾點:

- 對於純新手, 考慮到學習曲線, 不建議同時學React和TS. 最好分開學再一起用.
- 現在 (2017-3) 可以不用tsd或typings了. TS開發者把第三方的 .d.ts 包推到了npm. 使用這些類型定義時 npm install @types/xyz 就行.
- 現在的前端開發往往還用webpack等工具做資源打包. 有志於此的建議也了解一下.

---------

以下是廣告:

我自己做了一個TypeScript模板repo, 歡迎使用 https://github.com/jokester/typescript-boilerplate

用TS寫React的請從 webpack-react 分支開始. 其他還有webpack-preact, heroku (express.js) 等分支.

這個repo的定位是適合小項目和新手, 不追求大和全. 所以不像一些大boilerplate會有 webpack + react + redux + hotload + E2E測試等很多東西.

webpack-react分支的內容就只有webpack / react / 單元測試.

如果使用中遇到問題, 提issue或私信問我都可以.


很好的例子


see [翻譯] TypeScript 和 JSX 搞基的事 · Issue #3 · techird/blog · GitHub


本屌裝了Visual Studio 2015 Update 1,何處執行tsd命令呢?新建了一個.tsx文件,裡面寫代碼總是提示React沒定義,這個要怎麼下載.d.ts呢?


只要你配好 systemjs jspm tsd 的工程你就贏了。

推薦用 devd 做伺服器。


推薦閱讀:

為什麼我的 IE Tester 中 IE8 總是崩潰?
都說前端學習是先平緩後陡峭再平緩,那這幾個轉折點大概對應哪一領域的知識?
兩道前端的面試題,求各位大神解答一下?
前端界有哪些越早知道越好的小技巧、小知識?
在飢人谷學習前端是一種怎樣的體驗?

TAG:前端開發 | 前端入門 | TypeScript | React |