TypeScript入門-介面,typescript入門介面

來源:互聯網
上載者:User

TypeScript入門-介面,typescript入門介面

大致介紹

在Typescript裡,介面的作用就是為這些類型命名和為你的代碼或第三方代碼定義契約。

介面

例子:

  function printLabel(labelledObj: { label: string }) {   console.log(labelledObj.label);  }  let myObj = { size: 10, label: "Size 10 Object" };  printLabel(myObj);

printLabel函數有一個參數,要求這個參數是個對象,並且有一個屬性名稱為label的類型為string的屬性

有時我們會傳入多個參數,但是只檢測指定的參數有沒有

用介面來實現上面的例子:

interface LabelledValue {   label: string;  }  function printLabel(labelledObj: LabelledValue) {   console.log(labelledObj.label);  }  let myObj = {size: 10, label: "Size 10 Object"};  printLabel(myObj);

注意:要用到關鍵字 interface

可選屬性

有時介面裡的屬性不是必須的是可選的,那麼只要加個?就可以了

interface SquareConfig {   color?: string;   width?: number;  }  function createSquare(config: SquareConfig): {color: string; area: number} {   let newSquare = {color: "white", area: 100};   if (config.color) {    newSquare.color = config.color;   }   if (config.width) {    newSquare.area = config.width * config.width;   }   return newSquare;  }  let mySquare = createSquare({color: "black"});

上面的代碼中 config:SquareConfig規定了函數參數, {color: string;area: numner}規定了函數傳回值的類型

使用可選屬性的好處:

1、可以對可能存在的屬性進行定義

2、可以捕獲訪問不存在的屬性時的錯誤

唯讀屬性

如果向讓一個值唯讀,不可以修改就可以使用readonly

interface Point {    readonly x: number;    readonly y: number;  }  let p1: Point = { x: 10, y: 20 };  p1.x = 5; // error!

Typescript具有ReadonlyArray<number>類型,它與Array<T>相似,只是把怕有可變方法去掉了,因此可以確保數組建立後再也不能被修改:

  let a: number[] = [1, 2, 3, 4];  let ro: ReadonlyArray<number> = a;  ro[0] = 12; // error!  ro.push(5); // error!  ro.length = 100; // error!  a = ro; // error! 

額外的屬性檢查

看一個例子:

interface SquareConfig {    color?: string;    width?: number;  }  function createSquare(config: SquareConfig): { color: string; area: number } {    // ...  }  let mySquare = createSquare({ colour: "red", width: 100 });

起初會認為這個是對的,介面定義了兩個可選屬性color和width。函數實際傳入了width屬性和一個介面沒有定義的colour屬性,但是這段代碼會報錯。

對象字面量會被特殊對待而且會經過額外屬性檢查,當將它們賦值給變數或作為參數傳遞的時候。 如果一個對象字面量存在任何“目標類型”不包含的屬性時,你會得到一個錯誤。

最好的解決辦法就是添加一個字串索引簽章

  interface SquareConfig {    color?: string;    width?: number;    [propName: string]: any;  }

函數類型

例子:

interface SearchFunc {   (source: string, subString: string): boolean;  }  let mySearch: SearchFunc;  mySearch = function(src, sub) {    let result = src.search(sub);    if (result == -1) {      return false;    }    else {      return true;    }  }

可索引的類型

可索引類型比如a[10]或obj['a']。 可索引類型具有一個索引簽章,它描述了對象索引的類型,還有相應的索引傳回值類型。

interface StringArray {   [index: number]: string;  }  let myArray: StringArray;  myArray = ["Bob", "Fred"];  let myStr: string = myArray[0];

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的協助,同時也希望多多支援幫客之家!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.