TypeScript 是JavaScript類型的超集,它可以編譯成純JavaScript。
基礎類型
布爾值boolean
let isDone: boolean = false;
數字number
let decLiteral: number = 6;
字符串string
let name: string = "bob"; name = "smith";
你還可以使用模版字符串,它可以定義多行文本和內嵌表達式。 這種字符串是被反引號包圍( `),並且以${ expr }這種形式嵌入表達式
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
let list: number[] = [1, 2, 3];
使用數組泛型,Array<元素類型>:
let list: Array<number> = [1, 2, 3];
元組 Tuple
元組類型允許表示一個已知元素數量和類型的數組,各元素的類型不必相同。 比如,你可以定義一對值分別爲 string和number類型的元組。
// Declare a tuple type let x: [string, number]; // Initialize it x = ['hello', 10]; // OK // Initialize it incorrectly x = [10, 'hello']; // Error
當訪問一個已知索引的元素,會得到正確的類型:
console.log(x[0].substr(1)); // OK console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'
當訪問一個越界的元素,會使用聯合類型替代:
x[3] = 'world'; // OK, 字符串可以賦值給(string | number)類型 console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString x[6] = true; // Error, 布爾不是(string | number)類型
枚舉 enum
enum Color {Red, Green, Blue} let c: Color = Color.Green;
enum Color {Red = 1, Green, Blue} let colorName: string = Color[2]; console.log(colorName); // 顯示'Green'因爲上面代碼裏它的值是2
Any
let notSure: any = 4; notSure = "maybe a string instead"; notSure = false; // okay, definitely a boolean
let list: any[] = [1, true, "free"]; list[1] = 100;
Void
某種程度上來說,void類型像是與any類型相反,它表示沒有任何類型。 當一個函數沒有返回值時,你通常會見到其返回值類型是 void:
function warnUser(): void { console.log("This is my warning message"); }
聲明一個void類型的變量沒有什麼大用,因爲你只能爲它賦予undefined和null:
let unusable: void = undefined;
Null 和 Undefined
TypeScript裏,undefined和null兩者各自有自己的類型分別叫做undefined和null。 和 void相似,它們的本身的類型用處不是很大:
// Not much else we can assign to these variables! let u: undefined = undefined; let n: null = null;
Never
never類型表示的是那些永不存在的值的類型。 例如, never類型是那些總是會拋出異常或根本就不會有返回值的函數表達式或箭頭函數表達式的返回值類型; 變量也可能是 never類型,當它們被永不爲真的類型保護所約束時。
never類型是任何類型的子類型,也可以賦值給任何類型;然而,沒有類型是never的子類型或可以賦值給never類型(除了never本身之外)。 即使 any也不可以賦值給never。
下面是一些返回never類型的函數:
// 返回never的函數必須存在無法達到的終點 function error(message: string): never { throw new Error(message); } // 推斷的返回值類型爲never function fail() { return error("Something failed"); } // 返回never的函數必須存在無法達到的終點 function infiniteLoop(): never { while (true) { } }
Object
object表示非原始類型,也就是除number,string,boolean,symbol,null或undefined之外的類型。
使用object類型,就可以更好的表示像Object.create這樣的API。例如:
declare function create(o: object | null): void; create({ prop: 0 }); // OK create(null); // OK create(42); // Error create("string"); // Error create(false); // Error create(undefined); // Error
類型斷言
類型斷言有兩種形式。 其一是“尖括號”語法:
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;
變量聲明
var a = 10;
let hello = "Hello!";
const numLivesForCat = 9;