一、物件型別

1. 使用介面定義物件型別:介面類似java中的介面,可用於對類的一部分進行抽象以及對物件形狀的描述。

物件定義的變數應與介面數量相同。不可多不可少。

interface Animal {
  land: boolean;
  sound: string;
}

let dog: Animal = {
  land: true,
  sound: 'bark'
};
2. 特殊屬性:

1)可選屬性:一個物件不需要匹配介面完全形狀的時候使用,在屬性後面加?

interface Animal {
  land: boolean;
  sound?: string;
}
let dog: Animal = { land: true}; 2)任意屬性:不確定要加的屬性是什麼。[propName: string]: any;
interface Animal {
  land: boolean;
  sound?: string;
  [propName: string]: any;
}

3)只讀屬性:只在宣告時賦值,不可再次賦值
readonly id: number;

二、陣列型別:

1. 陣列型別確定後,陣列項中不可出現其他型別的資料

let fibonacci: number[] = [1, 1, 2, 3, 5];

2. 陣列泛型:Array<elemType>,泛型,顧名思義多種型別,這裡指預定什麼型別,使用時在進行指定。
function createArray<T>(length: number, value: T): Array<T> {
  let result = [];
  for (let i = 0; i < length; i++) {
    result[i] = value;
  }
  return result;
}

createArray<string>(3, 'x');
先將任意型別定為T,然後呼叫時將string付給T,則是string型別

3. 用介面表示:

interface NumberArray {
  [index: number]: number;
}
let fibonacci: NumberArray = [1, 1, 2, 3, 5];
4. 任意型別陣列:
let list: any[] = ['Xcat Liu', 25, { website: 'http://xcatliu.com' }];
5. 類陣列:不是陣列型別,常常有自己的介面定義。

三、函式型別:同javascript,函式通過函式宣告及函式表示式定義,要考慮輸入及輸出

1. 函式宣告:同樣引數個數不可多不可少

function sum(x: number, y: number): number {
  return x + y;
}
1)x: number, y: number宣告輸入

2)sum(...): number宣告輸出

2. 函式表示式

1)一般宣告方式:只對輸入進行了限制,輸出通過推斷限定

let mySum = function (x: number, y: number): number {
  return x + y;
};
2)箭頭函式方式:可以手動設定輸出型別,箭頭左邊設定輸入型別,右邊設定輸出型別
let mySum: (x: number, y: number) => number = function (x: number, y: number): number {
  return x + y;
};

3. 使用介面定義

interface SearchFunc {
  (source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
  return source.search(subString) !== -1;
}

4. 可選引數:同前面相同,在引數後面加上?

5. 引數預設值,在函式引數中直接設定:name: string='bob'

6. 剩餘引數:...rest獲取剩餘引數,引數個數不限,是一個數組,後面不可以有其它引數。

function push(array: any[], ...items: any[]) {
  items.forEach(function(item) {
    array.push(item);
  });
}

let a = [];
push(a, 1, 2, 3);

7. 過載:類似java的過載,相同名稱函式可以接受不同個數,不同型別的變數。