1. 程式人生 > >TypeScript基礎型別,類例項和函式型別宣告

TypeScript基礎型別,類例項和函式型別宣告

TypeScript(TS)是微軟研發的程式語言,是JavaScript的超集,也就是在JavaScript的基礎上添加了一些特性.其中之一就是型別宣告.

一、基礎型別

TS的基礎型別有 Boolean,Number,String,Array,Tuple,Enum,Any,Void,Null,Undefined,Never,Object.

==布林型別 Boolean==

let isDone: boolean = false

*在變數名後用冒號:T(T 代表TS的型別)宣告變數的型別。

==數字型別 Number==

//支援十進位制和十六進位制,ES6中引入的二進位制和八進位制
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

==字串型別 String==

let name: string = `Gene`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ name }.I'll be ${ age + 1 } years old next month.`;

==陣列型別 Array==

//有兩種宣告方式
//1 T[]
let list: number[] = [1, 2, 3];
let list: any[] = [1, true, "free"];
//2 Array<T>
let list: Array<number> = [1, 2, 3];

==元組型別 Tuple==

//可允許表示固定數量的陣列,但是陣列中可以具有不同的元素型別
let x: [string, number];
// Initialize it
x = ['hello', 10]; // OK
// Initialize it incorrectly
x = [10, 'hello']; // Error

==列舉型別 Enum==

像java等其它語言一樣,列舉型別可以為一組數值賦予友好的語義化名字.

//預設從0開始編號,也可以只指定第一個元素的編號,之後的編號依次遞增,也可以全部手動賦值編號;可以由列舉的值得到它的名字
enum Color {Red = 1, Green, Blue} let colorName: string = Color[2]; alert(colorName); // 顯示'Green'因為上面程式碼裡它的值是2

==任意型別 Any==

任意型別直接讓型別檢查器通過編譯階段的檢查.

let notSure: any = 4;
notSure = "maybe a string instead";//ok
notSure = false; // ok

==Void型別==

與any型別相反,它表示沒有任何型別

//我們可以為一個沒有任何返回值的函式的返回值型別定義為void
function warnUser(): void {
    alert("This is my warning message");
}
//當宣告一個void型別變數時,只能賦值為undefined 和 null
let unusable: void = undefined;

==Null 和 Undefined==

//預設情況下null和undefined是所有型別的子型別.
let u: undefined = undefined;
let n: null = null;

==Never型別==

never型別表示的是那些永不存在的值的型別。 never型別也是任何型別的子型別,也可以賦值給任何型別;

// 返回never的函式必須存在無法達到的終點 
function error(message: string): never { 
throw new Error(message); 
}

二、型別斷言

類似其他語言的強制型別轉換 型別斷言有兩種形式。

其一是“尖括號”語法:

let someValue: any = "this is a string";

let strLength: number = (<string>someValue).length;

另一個為as語法:

let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;

三、類的例項的型別宣告

let greeter: Greeter;
greeter = new Greeter("world");

四、函式型別的宣告

函式型別包含兩部分:引數型別和返回值型別,其中返回值型別ts可通過返回語句自動推斷得出.

js中:

function add(x, y) {
    return x + y
}

TS中:

function add(x: number, y: number): number {
    return x + y;
}

其中函式宣告時的引數有必傳引數,可選引數,預設引數,剩餘引數.

==必傳引數==

params:引數

==可選引數==

params?:引數型別

呼叫時可以不填;

==預設引數==

params=預設值

呼叫時可以不填;

宣告時一般放在最後一個位置,如果不是,那麼呼叫的時候必須要傳入undefined引數值

function buildName(firstName = "Will", lastName: string) {
    return firstName + " " + lastName;
}

let result1 = buildName("Bob"); // error
let result2 = buildName("Bob", "Adams", "Sr.");  // error
let result3 = buildName("Bob", "Adams");// ok
let result4 = buildName(undefined, "Adams"); // ok

==剩餘引數==

...restOfName: string[]

function buildName(firstName: string, ...restOfName: string[]) {
    return firstName + " " + restOfName.join(" ");
}

let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");