布爾值: boolean
let isDone: boolean = false;
數字: number
- 和JavaScript一樣,TS里的所有數字都是浮點數.
- 支持十進制和十六進制字面量,TS還支持ECMAScript 2015中引入的二進制和八進制字面量。
let decLiteral: number = 6; // 十進制 let hexLiteral: number = 0xf00d; // 十六進制 let binaryLiteral: number = 0b1010; // 二進制 let octalLiteral: number = 0o744; // 八進制
字符串: string
使用單引號(')或雙引號(")來表示字符串類型。反引號(`)來定義多行文本和內嵌表達式.
let firstName: string = "bob"; firstName = "smith"; let sentence: string = `Hello, my firstName is ${ firstName }.`; let sentence1: string = "Hello, my firstName is " + firstName + "." ;
數組: array
// 在元素類型后面加上[] let list: number[] = [1, 2, 3]; // 數組泛型,Array<元素類型>: let list1: Array<number> = [1, 2, 3];
元組: Tuple
元組類型允許表示一個已知元素數量和類型的數組,各元素的類型不必相同, 對應位置的類型需要相同。
// 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
對JavaScript標准數據類型的一個補充,使用枚舉類型可以為一組數值賦予友好的名字。
enum Color {Red, Green, Blue} let c: Color = Color.Green; // 默認情況下,從0開始為元素編號。 你也可以手動的指定成員的數值。 例如,我們將上面的例子改成從 1開始編號: enum Color {Red = 1, Green, Blue} let c: Color = Color.Green; //或者,全部都采用手動賦值: enum Color {Red = 1, Green = 2, Blue = 4} let c: Color = Color.Green; //枚舉類型提供的一個便利是你可以由枚舉的值得到它的名字 enum Color {Red = 1, Green, Blue} let colorName: string = Color[2]; console.log(colorName); // 顯示'Green'因為上面代碼里它的值是2
Any:
any, 為不清楚類型的變量指定一個類型, 不通過類型檢查器檢測.
let notSure: any = 4; notSure = "maybe a string instead"; notSure = false; // okay, definitely a boolean // any類型允許你在編譯時可選擇地包含或移除類型檢查, 在它上面調用任意的方法. let notSure: any = 4; notSure.ifItExists(); // okay, ifItExists might exist at runtime notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check) // Object類型的變量只是允許你給它賦任意值 - 但是卻不能夠在它上面調用任意的方法,即便它真的有這些方法 let prettySure: Object = 4; prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'. // 當你只知道一部分數據的類型時,any類型也是有用的。 比如,你有一個數組,它包含了不同的類型的數據: 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
- 默認情況下null和undefined是所有類型的子類型。 例如可以把 null和undefined賦值給number類型的變量。
- 當你指定了--strictNullChecks標記(鼓勵使用,可以避免很多問題),null和undefined只能賦值給void和它們各自.
- 使用了--strictNullChecks標記后,如果想傳入一個 string或null或undefined,可以使用聯合類型string | null | undefined.
let n: null = null; let u: undefined = undefined;
Never
never, 表示的是那些永不存在的值的類型。
- 例如never類型是那些總是會拋出異常或根本就不會有返回值的函數表達式或箭頭函數表達式的返回值類型;
- 變量也可能是 never類型,當它們被永不為真的類型保護所約束時。
- never類型是任何類型的子類型,也可以賦值給任何類型;
- 然而,沒有類型是never的子類型或可以賦值給never類型(除了never本身之外)。 即使 any也不可以賦值給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之外的類型。
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; // 可憑個人喜好用以上方法,但當你在TypeScript里使用JSX時,只有as語法斷言是被允許的。