TypeScript的類型斷言和類型推論

1. 類型斷言

類型斷言好比其它語(yǔ)言里的類型轉(zhuǎn)換庶艾,但是不進(jìn)行特殊的數(shù)據(jù)檢查和解構(gòu),它沒(méi)有運(yùn)行時(shí)的影響落竹,只是在編譯階段起作用,TypeScript會(huì)假設(shè)程序員已經(jīng)檢查過(guò)

類型斷言有兩種方式:

1.1 尖括號(hào)寫法

let someValue: any = "this is a string";
// 如果寫的是any找長(zhǎng)短的時(shí)候編譯器是找不到length屬性的,類型斷言后就可以找到
let strLength: number = (<string>someValue).length;

1.2 as寫法

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

兩種形式是等價(jià)的朱转,但是當(dāng)在TypeScript里使用JSX語(yǔ)法時(shí)积暖,只有as語(yǔ)法斷言是被允許的


2. 類型推論

TypeScript里藤为,在有些沒(méi)有明確指出類型的地方夺刑,類型推論會(huì)幫助提供類型

let x = 3;
// 變量x的類型被推斷為數(shù)字.這種推斷發(fā)生在初始化變量和成員,設(shè)置默認(rèn)參數(shù)值和決定函數(shù)返回值時(shí)

2.1 最佳通用類型

當(dāng)需要從幾個(gè)表達(dá)式中推斷類型時(shí)候,會(huì)使用這些表達(dá)式的類型來(lái)推斷出一個(gè)最合適的通用類型

let x = [0, 1, null]; // 這時(shí)x被推斷為(null | number)[]

由于最終的通用類型取自候選類型存淫,有些時(shí)候候選類型共享相同的通用類型,但是卻沒(méi)有一個(gè)類型能做為所有候選類型的類型

class Animal {}
class Rhino extends Animal {}
class Elephant extends Animal {}
class Snake extends Animal {}

let zoo = [new Rhino(), new Elephant(), new Snake()];
// 被推斷為(Rhino | Elephant | Snake)[]類型
// 我們想讓zoo被推斷為Animal[]類型,但是這個(gè)數(shù)組里沒(méi)有對(duì)象是Animal類型的,因此不能推斷出這個(gè)結(jié)果
// 為了更正,需要明確指定類型
let zoo: Animal[] = [new Rhino(), new Elephant(), new Snake()];

2.2 上下文類型

TypeScript類型推論也可能按照相反的方向進(jìn)行桅咆。 這被叫做“按上下文歸類”坞笙。按上下文歸類會(huì)發(fā)生在表達(dá)式的類型與所處的位置相關(guān)時(shí)

window.onmousedown = function (mouseEvent) { // 這個(gè)例子會(huì)報(bào)錯(cuò)
  console.log(mouseEvent.button);  // -> Error
};
/*
  TypeScript類型檢查器使用window.onmousedown函數(shù)的類型來(lái)推斷右邊函數(shù)表達(dá)式的類型。 因此,就能推斷出mouseEvent參數(shù)的類型了薛夜。如果函數(shù)表達(dá)式不是在上下文類型的位置,mouseEvent參數(shù)的類型需要指定為any,這樣就不會(huì)報(bào)錯(cuò)了
*/
window.onmousedown = function (mouseEvent: any) { // 手動(dòng)指定了參數(shù)類型上下文類型就會(huì)被忽略
  console.log(mouseEvent.button);  // <- Now, no error is given
};

上下文歸類會(huì)在很多情況下使用到。通常包含函數(shù)的參數(shù)寞冯,賦值表達(dá)式的右邊,類型斷言简十、對(duì)象成員和數(shù)組字面量和返回值語(yǔ)句。 上下文類型也會(huì)做為最佳通用類型的候選類型

function createZoo(): Animal[] { // 在這里面Animal就是被作為最佳通用類型
  return [new Rhino(), new Elephant(), new Snake()];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市民傻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漓踢,老刑警劉巖牵署,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奴迅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡取具,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門暇检,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)婉称,“玉大人,你說(shuō)我怎么就攤上這事王暗。” “怎么了俗壹?”我有些...
    開(kāi)封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)肛捍。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拙毫,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任缀蹄,我火速辦了婚禮膘婶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘悬襟。我一直安慰自己,他們只是感情好脊岳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布垛玻。 她就那樣靜靜地躺著奶躯,像睡著了一般帚桩。 火紅的嫁衣襯著肌膚如雪嘹黔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天郭蕉,我揣著相機(jī)與錄音,去河邊找鬼恳不。 笑死,一個(gè)胖子當(dāng)著我的面吹牛烟勋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卵惦,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瓦戚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了较解?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤印衔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后奸焙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡了赌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年玄糟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勿她。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阵翎。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡播揪,死狀恐怖筒狠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辩恼,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布灶伊,位于F島的核電站寒跳,受9級(jí)特大地震影響聘萨,放射性物質(zhì)發(fā)生泄漏童太。R本人自食惡果不足惜米辐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一翘贮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧爆惧,春花似錦、人聲如沸扯再。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)斋竞。三九已至,卻和暖如春饺律,著一層夾襖步出監(jiān)牢的瞬間窃页,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工复濒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脖卖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓巧颈,卻偏偏與公主長(zhǎng)得像畦木,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砸泛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355