TypeScript學習筆記(四)——物件、陣列、函式型別
阿新 • • 發佈:2019-02-16
一、物件型別
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>,泛型,顧名思義多種型別,這裡指預定什麼型別,使用時在進行指定。
先將任意型別定為T,然後呼叫時將string付給T,則是string型別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');
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的過載,相同名稱函式可以接受不同個數,不同型別的變數。