在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 介紹
初始化項目結(jié)構(gòu)
聯(lián)合類型
介紹
介紹
介紹
編譯選項
TypeScript 1.6
介紹
介紹
發(fā)展路線圖
介紹
在MSBuild里使用編譯選項
可迭代性
TypeScript 1.3
介紹
介紹
TypeScript 1.1
變量聲明
即將到來的Angular 2框架是使用TypeScript開發(fā)的。 因此Angular和TypeScript一起使用非常簡單方便
tsconfig.json
介紹
介紹
介紹
在MSBuild里使用編譯選項
使用TypeScript的每日構(gòu)建版本
新建工程
枚舉
三斜線指令
結(jié)合ASP.NET v5使用TypeScript
TypeScript里的this
介紹
TypeScript 1.4
編碼規(guī)范
介紹
模塊解析
ASP.NET 4
架構(gòu)概述
介紹
介紹
ASP.NET Core
TypeScript 1.8
介紹
介紹
創(chuàng)建簡單工程
TypeScript 1.7
TypeScript 1.5
NPM包的類型
支持TypeScript的編輯器

介紹

為了讓程序有價值,我們需要能夠處理最簡單的數(shù)據(jù)單元:數(shù)字,字符串,結(jié)構(gòu)體,布爾值等。 TypeScript支持與JavaScript幾乎相同的數(shù)據(jù)類型,此外還提供了實用的枚舉類型方便我們使用。

布爾值

最基本的數(shù)據(jù)類型就是簡單的true/false值,在JavaScript和TypeScript里叫做boolean(其它語言中也一樣)。

let isDone: boolean = false;

數(shù)字

和JavaScript一樣,TypeScript里的所有數(shù)字都是浮點數(shù)。 這些浮點數(shù)的類型是number。 除了支持十進(jìn)制和十六進(jìn)制字面量,Typescript還支持ECMAScript 2015中引入的二進(jìn)制和八進(jìn)制字面量。

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;

字符串

JavaScript程序的另一項基本操作是處理網(wǎng)頁或服務(wù)器端的文本數(shù)據(jù)。 像其它語言里一樣,我們使用string表示文本數(shù)據(jù)類型。 和JavaScript一樣,可以使用雙引號(")或單引號(')表示字符串。

let name: string = "bob";
name = "smith";

你還可以使用模版字符串,它可以定義多行文本和內(nèi)嵌表達(dá)式。 這種字符串是被反引號包圍(`),并且以${ expr }這種形式嵌入表達(dá)式

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.`;

這與下面定義sentence的方式效果相同:

let sentence: string = "Hello, my name is " + name + ".\n\n" +
    "I'll be " + (age + 1) + " years old next month.";

數(shù)組

TypeScript像JavaScript一樣可以操作數(shù)組元素。 有兩種方式可以定義數(shù)組。 第一種,可以在元素類型后面接上[],表示由此類型元素組成的一個數(shù)組:

let list: number[] = [1, 2, 3];

第二種方式是使用數(shù)組泛型,Array<元素類型>

let list: Array<number> = [1, 2, 3];

元組 Tuple

元組類型允許表示一個已知元素數(shù)量和類型的數(shù)組,各元素的類型不必相同。 比如,你可以定義一對值分別為stringnumber類型的元組。

// Declare a tuple type
let x: [string, number];
// Initialize it
x = ['hello', 10]; // OK
// Initialize it incorrectly
x = [10, 'hello']; // Error

當(dāng)訪問一個已知索引的元素,會得到正確的類型:

console.log(x[0].substr(1)); // OK
console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'

當(dāng)訪問一個越界的元素,會使用聯(lián)合類型替代:

x[3] = 'world'; // OK, 字符串可以賦值給(string | number)類型

console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString

x[6] = true; // Error, 布爾不是(string | number)類型

聯(lián)合類型是高級主題,我們會在以后的章節(jié)里討論它。

枚舉

enum類型是對JavaScript標(biāo)準(zhǔn)數(shù)據(jù)類型的一個補充。 像C#等其它語言一樣,使用枚舉類型可以為一組數(shù)值賦予友好的名字。

enum Color {Red, Green, Blue};
let c: Color = Color.Green;

默認(rèn)情況下,從0開始為元素編號。 你也可以手動的指定成員的數(shù)值。 例如,我們將上面的例子改成從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;

枚舉類型提供的一個便利是你可以由枚舉的值得到它的名字。 例如,我們知道數(shù)值為2,但是不確定它映射到Color里的哪個名字,我們可以查找相應(yīng)的名字:

enum Color {Red = 1, Green, Blue};
let colorName: string = Color[2];

alert(colorName);

任意值

有時候,我們會想要為那些在編程階段還不清楚類型的變量指定一個類型。 這些值可能來自于動態(tài)的內(nèi)容,比如來自用戶輸入或第三方代碼庫。 這種情況下,我們不希望類型檢查器對這些值進(jìn)行檢查而是直接讓它們通過編譯階段的檢查。 那么我們可以使用any類型來標(biāo)記這些變量:

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean

在對現(xiàn)有代碼進(jìn)行改寫的時候,any類型是十分有用的,它允許你在編譯時可選擇地包含或移除類型檢查。 你可能認(rèn)為Object有相似的作用,就像它在其它語言中那樣。 但是Object類型的變量只是允許你給它賦任意值 -- 但是卻不能夠在它上面調(diào)用任意的方法,即便它真的有這些方法:

let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)

let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.

當(dāng)你只知道一部分?jǐn)?shù)據(jù)的類型時,any類型也是有用的。 比如,你有一個數(shù)組,它包含了不同的類型的數(shù)據(jù):

let list: any[] = [1, true, "free"];

list[1] = 100;

空值

某種程度上來說,void類型像是與any類型相反,它表示沒有任何類型。 當(dāng)一個函數(shù)沒有返回值時,你通常會見到其返回值類型是void

function warnUser(): void {
    alert("This is my warning message");
}

聲明一個void類型的變量沒有什么大用,因為你只能為它賦予undefinednull

let unusable: void = undefined;

類型斷言

有時候你會遇到這樣的情況,你會比TypeScript更了解某個值的詳細(xì)信息。 通常這會發(fā)生在你清楚地知道一個實體具有比它現(xiàn)有類型更確切的類型。

通過類型斷言這種方式可以告訴編譯器,“相信我,我知道自己在干什么”。 類型斷言好比其它語言里的類型轉(zhuǎn)換,但是不進(jìn)行特殊的數(shù)據(jù)檢查和解構(gòu)。 它沒有運行時的影響,只是在編譯階段起作用。 TypeScript會假設(shè)你,程序員,已經(jīng)進(jìn)行了必須的檢查。

類型斷言有兩種形式。 其一是“尖括號”語法:

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;

兩種形式是等價的。 至于使用哪個大多數(shù)情況下是憑個人喜好;然而,當(dāng)你在TypeScript里使用JSX時,只有as語法斷言是被允許地。

關(guān)于let

你可能已經(jīng)注意到了,我們使用let關(guān)鍵字來代替大家所熟悉的JavaScript關(guān)鍵字var。 let關(guān)鍵字是JavaScript的一個新概念,TypeScript實現(xiàn)了它。 我們會在以后詳細(xì)介紹它,很多常見的問題都可以通過使用let來解決,所以盡可能地使用let來代替var吧。

上一篇:TypeScript 1.5下一篇:編碼規(guī)范