對typescript重新思考

引言

最近有在看一些關於typescript的東西,以前的理解就僅僅只是認爲它比JavaScript多了一個類型檢測,後來發現了一篇非常好的文章,讓我重新對typescript進行了思考,但是由於本人沒有寫過typescript,所以準備從實踐入手,深入理解關於面向接口編程的原理,故這是一篇長期更新的博客哈哈哈哈。

具體的概念示例代碼等,官方文檔裏面都寫得十分詳細。我就只是闡述一下自己的理解。

接口

typescript裏面接口的作用就是對這些類型命名和爲自己的代碼或者第三方代碼定義契約,我個人對於接口的理解有很多:

  1. 可以定義新的類型(普通對象/函數)
  2. 定義類類型,ts用它來明確強制一個類去符合某種契約(這是功能與Java類似)用發 implement <接口名稱>

注意:當一個類實現一個接口時,只對其實例部分進行類型檢查。

接口可以互相繼承、定義混合類型、接口還可以繼承類

泛型

主要是用來做類型約束,比如我不規定參數和返回值的類型,但是我必須保證參數和返回值類型相同。

  • 泛型類型(變量、函數、接口)最全面的示例:
interface GenericIdentityFn<T> {// 接口
    (arg: T): T;
}

function identity<T>(arg: T): T {// 函數
    return arg;
}

let myIdentity: GenericIdentityFn<number> = identity;
  • 泛型類
class GenericNumber<T>{
    zeroValue:T;
    add:(x:T,y:T)=>T
}
  • 泛型約束舉例

    1. 類類型:在typescript使用其創建工廠函數,需要引用構造函數的類類型

      function create<T>(c:{new ():T;}):T{
      	return new c();
      }
      
    2. 類型參數

      function getProperty<T,K extends keyof T>(obj:T,key:K):T[K]{
          return obj[key];
      }
      
      let x = { a: 1, b: 2, c: 3, d: 4 };
      getProperty(x, 'b'); // okay
      

高級類型(簡單寫,方便查看)

  • 交叉類型 & (類型斷言防止編譯器報錯)
  • 聯合類型 |
  • 類型保護與區分類型(typeof、instanceof、params is type)
  • null類型:(–strictNullChecks、a!語法從a的類型裏面去除null和undefined)
  • 類型別名(包括基本類型:type Name=string):不能被extends implements
  • 可辨識聯合,完整性檢查(–strictNullChecks+number或者never)
  • 多態的this類型
  • 索引類型(keyof T[K])
  • 映射類型(舊類型換成新類型,)

三斜線指令

/// <reference path="..." />

主要是一種引入外部庫地方案,還有很多其他的方案,可以自行查閱文檔。

typescript思想

  • 更加明確的模塊抽象過程,把考慮抽象和拓展看作寫一個模塊前的必備環節

ts“超”在哪裏

typescript是JavaScript的超集,超在哪裏?

  • typescript爲JavaScript引入了一套類型系統
  • typescript支持一些非ECMAScript正是標準的語法,比如裝飾器

學習資料

結語

感覺又長胖了,難受香菇,明天也要加油鴨~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章