總的來講,就是能夠幫助你不會犯下低級的錯誤,而且能夠幫助你高效開發。 雖然在html
推薦編輯器: vscode --- 這是開發 typescript 最好的工具。 node
因此,強烈推薦。react
使用webpack
全局安裝 typescript es6
npm install typescript -g
這時,咱們在命令行中輸入 tsc 就能夠發現相關的命令了。 tsc 即 typescript compiler。 web
編寫ts文件以下:mongodb
// hello.ts function greeter(person: string) { return "Hello, " + person; } var user = "Jane User"; console.log(greeter(user));
注意: 對於typescript,其後綴名必須是 .ts 或者 .tsx 或者 .d.ts,其中.ts是最經常使用的,.tsx是用在react的jsx語法裏的, .d.ts是爲了定義(define)類型使用的。typescript
命令行中輸入指令:npm
tsc hello.ts
因而該文件被編譯成了能夠在瀏覽器中正常運行的js文件:json
function greeter(person) { return "Hello, " + person; } var user = "Jane User"; console.log(greeter(user));
輸出結果爲一個hello.js
文件,它包含了和輸入文件中相同的JavsScript代碼。 一切準備就緒,咱們能夠運行這個使用TypeScript寫的JavaScript應用了!
可是,若是咱們傳入的user不是一個字符串,而是一個數組,那麼就會在編譯的過程當中報錯,雖然,仍是能夠編譯爲新的js文件,可是他提醒你你錯了仍是必要的。
好比一個函數須要接受一個對象做爲參數,那麼爲了保證傳入參數的正確性,咱們能夠建立一個接口,這個接口使用 interface 關鍵詞來建立,相似於一個對象, key 就是傳入對象的 key, value 是咱們但願傳入的 類型。 舉例以下所示:
interface Person { name: string, age: number } function greeter(person: Person) { return 'I am ' + person.name + "and I'm " + person.age + " years old" } var person = { name: 'wayne', age: 22 } console.log(greeter(person))
通過編譯:
function greeter(person) { return 'I am ' + person.name + "and I'm " + person.age + " years old"; } var person = { name: 'wayne', age: 22 }; console.log(greeter(person));
就能夠在瀏覽器運行了。
若是person對象的age屬性不是一個數字,就會在編譯的時候報錯。
以下所示, 當咱們懸停在屬性上時,能夠自動檢測其類型:
class Student { fullName: string; constructor(public firstName, public middleInitial, public lastName) { this.fullName = firstName + " " + middleInitial + " " + lastName; } } interface Person { firstName: string; lastName: string; } function greeter(person : Person) { return "Hello, " + person.firstName + " " + person.lastName; } var user = new Student("Jane", "M.", "User"); document.body.innerHTML = greeter(user);
更多查看 https://www.tslang.cn/docs/home.html
一、 tsconfig.json應該以下使用:
{ "compilerOptions": { "module": "commonjs", "target": "es5", "noImplicitAny": false, "sourceMap": false, "jsx": "react", "experimentalDecorators": true, "lib": [ "scripthost", "dom", "es6" ], "allowSyntheticDefaultImports": true, "allowJs": true } }
在實際的使用過程當中,咱們仍是應該添加 exclude 的,這個很是必要,尤爲是後端也須要寫的時候,咱們若是不用 exclude, 那麼在 tsc 查詢 ts 文件的時間會很是長,可是若是使用了 exclude 字段,那麼咱們就能夠很容易地進行去除沒必要要的文件,哈哈哈,666。
二、webpack配置:
module: { loaders: [ { test: /\.tsx?$/, loader: 'ts-loader' },
即咱們須要安裝一個轉化 tsx 的插件。
還須要添加下面的:
resolve: { extensions: [".ts", ".tsx", ".js", '.less'], },
三、引入
在使用react的時候,應該以下:
npm install @types/react --save-dev
這樣有助於咱們的類型檢查。
在使用react-dom的時候以下:
npm intall @types/react-dom --save-dev
當咱們須要在文件中使用的時候,以下:
import * as React from 'react'; import { Link, browserHistory} from 'react-router' import './index.less'; export default class Index extends React.PureComponent<Iprops, Istate> { constructor(props) { super(props); this.state = { name: 'zzw' } } componentDidMount() { } render () { return ( <div className="index-wrap"> <h2>使用ant.design</h2> <p className="para">{this.props.age}</p> </div> ); } }; interface Iprops { age: number } interface Istate { name: string }
即,引入的時候使用 import * as React from 'react'
而且,咱們可使用 interface 來使用之。
四、當咱們在index頁中import進來pages頁的時候,爲何老是說找不到相應的模塊?
如,咱們在index頁中配置路由,因此,通常須要引入page頁,下面的引入方式出錯:
即對於index頁的引入沒有問題,可是引入allsug時老是出錯,爲何呢?
由於對於 ./pages/index 會自動尋找 index 下的 index.tsx ,可是在 allsug 下是 allsug.tsx, 若是allsug文件夾下也是 index.tsx,那麼就能夠正常引入了。
值得注意的是,咱們在看一些框架的源碼時能夠發現,大多文件下都會有一個index.js,方便直接引入,因此這是最佳實踐,能夠學習效仿。
五、事件的寫法