【react】使用 create-react-app 構建基於TypeScript的React前端架構

寫在前面

一直在探尋,那優雅的美;一直在探尋,那精湛的技巧;一直在探尋,那簡單又直白,優雅而美麗的代碼。css

------ 可是在JavaScript的動態類型、有時尷尬的自動類型轉換,以及 「0 == false」 是true的尷尬, 你知道 「[undefined] == 0「 是什麼返回結果嗎?再而後html

function add (a, b) { 
    return a+b 
}
add ("1", 2) // 12

這個結果是返回是12。vue

還記得某個深夜,當你望着萬行代碼流出千行熱淚的時候嗎?最後發現有一個if語句,條件爲‘’ 判false了? 或者發現忘記加parseInt致使的大坑?node

是時候亮出利器了。react

 

TypeScript的簡單入門 

咱們都知道JavaScript是動態類型,動態編譯的網頁腳本語言,「 動態 」 這個詞語實如今一個純粹的網頁腳本語言身上來講,彷佛並無什麼不妥。但如今,JavaScript要運行在node中,運行在服務端,甚至最初的網頁腳本js都由webpack,gulp這類的自動化構建工具變成了一個具備工程化、大型化、交互複雜化、性能要求高的 」 編程語言 「 了。webpack

 

而這個時候,最初的動態類型,或者所謂的 」object類型「,再或者雙等號兩邊的尷尬,在構建這些 」 大型軟件系統 (大型屎山)「 的時候,沉積的類型債務就真的是一座巨大的屎山了。git

 

TypeScript必定程度上解決了這個問題,它能夠一古腦兒的將屎山上的一大坨清除,在各類中大型團隊形形色色的開發者們中間得到一致的好評。github

 

 --------------------------------------------------知識分割線----------------------------------------------------web

若是你但願可以一邊看,一邊敲,你能夠先轉到下面的React和TypeScript章節,搭建一個基於create-react-app建立的typeScript的react架構,而後再回來看看這些示例,很少、很簡單typescript

 

TypeScript是JavaScript的超集,它是一門編譯型語言,我我的認爲,入門TypeScript從如下三個點入手,而後結合react的搭建、再到實際的項目應用,在應用中陸續接觸更多的技巧,泛型、枚舉、類型推論、命名空間等等。咱們先看看最重要的三點。

 

靜態類型

 

TypeScript能夠實現靜態的變量申明, 以下面的例子,注意在TypeScript中 string類型、 object類型的首字母也是小寫。

// 靜態類型申明
let isStatic: boolean = false;
isStatic = 1; // error: Cannot convert 'number' to boolean
let isString: string = 1;  // Type '1' is not assignable to type 'string'.

TypeScript裏,在有些沒有明確指出類型的地方,類型推論會幫助提供類型。以下面的例子

let a = 1;
    a = false;
    alert(a); // error: Cannot convert 'boolean' to number

 

絕大多數狀況類型推導就像上面那樣的狀況同樣,a = 1 ,a就是number類型了。

還有一些涉及更多的類型,入門能夠暫時忽略。

這裏咱們學習到的一點是:  TypeScript的變量類型是靜態的,每個變量都會有一個固定的類型。

 

函數

 

讓咱們再看看js中函數的定義:

function add (a, b) {
   return a + b;
}

 

上面這個函數實現了兩數相加,在本文開篇我掛了這個代碼上去,它的調用方式是這樣的:

add ("1", 2) // 12

」1「 + 2 = 12 , 雖然這裏的add函數看起來挺簡單的,咱們換個方式看看,就知道這個有多難受了。

add(testNumber(), 2)

誰能保證testNumber返回的必定是number ?

 

TypeScript能夠

function add (a: number, b: number) : number {
    return a + b;
}

在TypeScript中能夠經過相似變量申明那樣的類型申明的方式,申明一個函數的入參,返回的具體類型格式,可以真正保證函數的輸入輸出的一致性。

add("1", 2) // Argument of type '"1"' is not assignable to parameter of type 'number' 
複製代碼
function testNumber () {
      let num = '1';
      return num;
    }
    function add (a: number, b: number) : number {
        return a + b;
    }
    add(testNumber(), 2); // Argument of type 'string' is not assignable to parameter of type 'number'.ts(2345)
複製代碼

如今這些代碼將直接報錯,沒法經過編譯,這就是靜態類型的強大之處。

 

接口

 

接口是TypeScript的核心原則之一的實現,是對值所具備的結構進行類型檢查。

這句話什麼意思呢?說簡單點,接口就是對象的屬性,對象上的方法也能夠作類型檢查,能夠約束某個對象的值必須是預期的值。例如:

複製代碼
interface IAddObj {
      a: number,
      b: number
}
function add (addObj: IAddObj) : number {
      return addObj.a + addObj.b;
}
複製代碼

咱們定義add函數,但願傳入一個addObj的對象值,而後對象上有a和b,這時候我想要規定這個對象必須有a和b,並且a和b是number類型的。

這就是接口最簡單,80%,最通用的用法:規定對象的屬性

 

React&TypeScript的環境搭建

前提

首先你電腦上須要安裝有nodejs、npm,怎麼安裝百度便可,其次你須要對react和webpack有必定的認知。這是前提。

 

第一步 工程建立

 

一、安裝create-react-app

安裝create-react-app,打開命令行 輸入命令

npm install -g create-react-app

 

二、建立基於TypeScript的react環境

打開命令行 輸入 

create-react-app apptest --scripts-version=react-scripts-ts

 

三、爲了可以自定義webpack打包配置,咱們還要運行一個命令,進入項目目錄/apptest運行    運行後提示輸入y便可

 npm run eject

 

四、在項目目錄運行命令: npm run start 稍等片刻就能夠看見react的歡迎界面啦

 

第二步 目錄規整

若是你想要直接獲取規整後的源代碼,在個人git能夠下載到: 連接  下載完成在目錄npm install 便可。

 

建立完項目後,能夠看見目前的目錄結構仍是比較混亂的,如今讓咱們來梳理一下

主要規整 /src 主代碼目錄中的文件,咱們依次新建幾個文件夾

assets 資源目錄,存放css、image、字體文件等

components   存放組件目錄

views 存放主視圖目錄

utils 存放工具函數、工具類

config  存放公共配置文件

規整後的文件目錄以下,我將示例代碼分別分配到了其中

 

須要注意的是移動文件後,對應的資源引用目錄的更改。

而後須要修改根目錄tslint.json爲:

 

複製代碼
{
  "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"],
  "linterOptions": {
    "exclude": [
      "config/**/*.js",
      "node_modules/**/*.ts",
      "coverage/lcov-report/*.js"
    ]
  },
  "rules": {
    "ordered-imports": false
  },
  "jsRules": {
    "ordered-imports": false
  }
}
複製代碼

而後從新運行 npm run start 就能夠了,如今能夠在App.vue裏試一試TypeScript了

小結

原文:https://www.cnblogs.com/ztfjs/p/react_typescript_test.html

到這裏,其實還遠遠沒有完結,咱們還須要引入其餘的組件來開發一個真正的React項目,還須要制定一套規範去搭建一個React團隊,拭目以待。

相關文章
相關標籤/搜索