基本類型

在TypeScript中,提供了一下基本數(shù)據(jù)類型
\color{red}{布爾類型(boolean)}
\color{red}{數(shù)據(jù)類型(number)}
\color{red}{字符串類型(string)}
\color{red}{數(shù)組類型(array)}
\color{red}{元組類型(tuple)}
\color{red}{枚舉類型(enum)}
\color{red}{任意值類型(any)}
\color{red}{null 和 undefined}
\color{red}{void 類型}
\color{red}{ never 類型}
其中元組组力、枚舉瘟斜、任意值、void類型和 never類型是TypeScript有別與JavaScript的特有類型术陶。
在TypeScript中聲明變量凑懂,需要加上類型聲明,例如boolean和string等梧宫。通過靜態(tài)類型約束接谨,在編譯時(shí)執(zhí)行類型檢查,可以避免一些類型混用的低級(jí)錯(cuò)誤塘匣。

布爾類型

布爾類型是最簡(jiǎn)單的數(shù)據(jù)類型脓豪,只有true和false兩種值。下面定義了一個(gè)布爾類值的變量flag忌卤,并賦值為true扫夜。由于flag被初始化為布爾類型,如果再賦值為非boolean的其他類型值驰徊,編譯時(shí)會(huì)拋出錯(cuò)誤笤闯。

let flag:boolean = true;
flag = 1; //報(bào)錯(cuò),不能把數(shù)字類型的值賦給布爾類型的變量棍厂。

數(shù)字類型

在TypeScript中颗味,數(shù)字都是浮點(diǎn)型。TypeScript同時(shí)支持二進(jìn)制勋桶、八進(jìn)制脱衙、十進(jìn)制和十六進(jìn)制字面量侥猬,示例代碼如下:

let binaryLiteral:number = 0b1010;//二進(jìn)制
let octalLiteral:number = 0o744;//八進(jìn)制
let decLiteral:number = 6;十進(jìn)制
let hexLiteral:number = 0xf00d;//十六進(jìn)制

字符串類型

TypeScript支持使用單引號(hào)(‘)或者雙引號(hào)(“)來表示字符串類型。除此之外捐韩,還支持使用模版字符串反引號(hào)(`)來定義多行文本和內(nèi)嵌表達(dá)式退唠。使用${expr}的形式嵌入變量或者表達(dá)式,在處理拼接字符串的時(shí)候很有用荤胁,示例代碼如下瞧预。

let name: string = "Angular";
let years:number = 5;
let words:stirng = `你好,今年是${name}發(fā)布${years+1}周年`;

數(shù)組類型

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

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

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

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

元組類型

元組類型用來表示已知元素?cái)?shù)量和類型的數(shù)組,各元素的類型不必相同辫封,下面定義了一對(duì)值分別為字符串和數(shù)字類型的元組硝枉。

let x:[string,number];
x = ["Angular",24];
x = [10,"Angular"];//報(bào)錯(cuò)
console.log(x[0]);  //輸出Angular

枚舉類型

枚舉是一個(gè)可被命名的整型常數(shù)的集合,枚舉類型為集合成員賦予有意義的名稱倦微,增強(qiáng)可讀性妻味。

enum Color {Red, Green, Blue}
let c: Color = Color.Blue;
console.log(c);//輸出:2

枚舉默認(rèn)下標(biāo)是0,可以手動(dòng)修改默認(rèn)下標(biāo)值

enum Color {Red=2, Blue, Green=6}
let c: Color = Color.Blue;
console.log(c);//輸出:3

任意值類型

任意值是TypeScript針對(duì)編程時(shí)類型不明確的變量使用的一種數(shù)據(jù)類型欣福,它常用于以下二種情況责球。

① 變量的值動(dòng)態(tài)變化時(shí),比如來自用戶的輸入或者第三方代碼庫拓劝,任意值類型可以讓這些變量跳過編譯階段的類型檢查

let x:any = 1;//數(shù)字類型
x = "I am a string"; //字符串類型
x = false; //布爾類型

② 定義存儲(chǔ)各種類型數(shù)據(jù)的數(shù)組時(shí)

let arrayList:any[] = [1,falses,"fine"];
arrayList[1] = 100;

Void

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

聲明一個(gè)void類型的變量沒有什么大用雏逾,因?yàn)槟阒荒転樗x予undefined和null:

let unusable: void = undefined;
let unusable: void = null;

Null 和 Undefined

TypeScript里,undefined和null兩者各自有自己的類型分別叫做undefined和null凿将。 和 void相似校套,它們的本身的類型用處不是很大:

let u: undefined = undefined;
let n: null = null;

undefined 類型的變量只能被賦值為 undefined,null 類型的變量只能被賦值為 null牧抵。
與 void 的區(qū)別是笛匙,undefined 和 null 是所有類型的子類型。也就是說 undefined 類型的變量犀变,可以賦值給 number 類型的變量妹孙,但是盡量不要這么用。

// 這樣不會(huì)報(bào)錯(cuò)
let num: number = undefined;

// 這樣也不會(huì)報(bào)錯(cuò)
let u: undefined;
let num: number = u;

而 void 類型的變量不能賦值給 number 類型的變量:

let u: void;
let num: number = u;

// index.ts(2,5): error TS2322: Type 'void' is not assignable to type 'number'.

類型推論

如果沒有明確的指定類型获枝,那么 TypeScript 會(huì)依照類型推論(Type Inference)的規(guī)則推斷出一個(gè)類型蠢正。
以下代碼雖然沒有指定類型,但是會(huì)在編譯的時(shí)候報(bào)錯(cuò):

let myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.

事實(shí)上省店,它等價(jià)于:

let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7;

// index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.

聯(lián)合類型

聯(lián)合類型(Union Types)表示取值可以為多種類型中的一種嚣崭。

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
let myFavoriteNumber: string | number;
myFavoriteNumber = true;

// index.ts(2,1): error TS2322: Type 'boolean' is not assignable to type 'string | number'.
//   Type 'boolean' is not assignable to type 'number'.

聯(lián)合類型使用 | 分隔每個(gè)類型笨触。

這里的 string | number 的含義是,允許 myFavoriteNumber 的類型是 string 或者 number雹舀,但是不能是其他類型芦劣。

聯(lián)合類型的屬性或方法

當(dāng) TypeScript 不確定一個(gè)聯(lián)合類型的變量到底是哪個(gè)類型的時(shí)候,我們只能訪問此聯(lián)合類型的所有類型里共有的屬性或方法:

function getLength(something: string | number): number {
  return something.length;
}

// index.ts(2,20): error TS2339: Property 'length' does not exist on type 'string | number'.
//   Property 'length' does not exist on type 'number'.

上例中说榆,length 不是 string 和 number 的共有屬性媒惕,所以會(huì)報(bào)錯(cuò)录粱。

訪問 string 和 number 的共有屬性是沒問題的:

function getString(something: string | number): string {
  return something.toString();
}

聯(lián)合類型的變量在被賦值的時(shí)候洁奈,會(huì)根據(jù)類型推論的規(guī)則推斷出一個(gè)類型:

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
console.log(myFavoriteNumber.length); // 5
myFavoriteNumber = 7;
console.log(myFavoriteNumber.length); // 編譯時(shí)報(bào)錯(cuò)

// index.ts(5,30): error TS2339: Property 'length' does not exist on type 'number'.

上例中淹朋,第二行的 myFavoriteNumber 被推斷成了 string,訪問它的 length 屬性不會(huì)報(bào)錯(cuò)唱蒸。

而第四行的 myFavoriteNumber 被推斷成了 number邦鲫,訪問它的 length 屬性時(shí)就報(bào)錯(cuò)了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末神汹,一起剝皮案震驚了整個(gè)濱河市掂碱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慎冤,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沧卢,死亡現(xiàn)場(chǎng)離奇詭異蚁堤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)但狭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門披诗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人立磁,你說我怎么就攤上這事呈队。” “怎么了唱歧?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵宪摧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我颅崩,道長(zhǎng)几于,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任沿后,我火速辦了婚禮沿彭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘尖滚。我一直安慰自己喉刘,他們只是感情好瞧柔,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睦裳,像睡著了一般造锅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上推沸,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天备绽,我揣著相機(jī)與錄音,去河邊找鬼鬓催。 笑死肺素,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宇驾。 我是一名探鬼主播倍靡,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼课舍!你這毒婦竟也來了塌西?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤筝尾,失蹤者是張志新(化名)和其女友劉穎捡需,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筹淫,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡站辉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了损姜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饰剥。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖摧阅,靈堂內(nèi)的尸體忽然破棺而出汰蓉,到底是詐尸還是另有隱情,我是刑警寧澤棒卷,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布顾孽,位于F島的核電站,受9級(jí)特大地震影響比规,放射性物質(zhì)發(fā)生泄漏岩齿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一苞俘、第九天 我趴在偏房一處隱蔽的房頂上張望盹沈。 院中可真熱鬧,春花似錦、人聲如沸乞封。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肃晚。三九已至锚贱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間关串,已是汗流浹背拧廊。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晋修,地道東北人吧碾。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像墓卦,于是被迫代替她去往敵國和親倦春。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容