TypeSctipt語法和類型基礎(chǔ)

TypeScript基礎(chǔ)語法

TypeScript程序由以下部分組成:

  • 模塊
  • 函數(shù)
  • 變量
  • 語句和表達式
  • 注釋

tsc常用編譯參數(shù)

參數(shù) 參數(shù)說明
--help 顯示幫助信息
--module 載入擴展模塊
--target 設(shè)置ECMA版本
--declaration 額外生成一個.d.ts擴展名的文件(會生成兩個文件.d.ts和.js)
--removeComments 刪除文件的注釋
--out 編譯多個文件并合并到一個輸出文件
--sourcemap 生成一個sourcemap(.map)文件腐芍。sourcemap是一個存儲源代碼和編譯代碼對應(yīng)聞之映射的信息文件徊都。
--module nolmplicitAny 在表達式和聲明上有隱含的any類型時報錯
--watch 在監(jiān)視模式下運行編譯器。會監(jiān)視輸出文件卿闹,在他們改變時重新編譯恩伺。

TypeScript保留關(guān)鍵字

image.png

語法

  • 空白和換行
    TS會忽略程序中出現(xiàn)的空格弧圆、制表符和換行符(用來縮進代碼)山宾。
  • TypeScript區(qū)分大小寫字符
  • 分號可選
    寫在同一行一定要使用分號來分隔,否則會報錯(每行指令都是一段語句)楞遏。
  • 注釋
    單行注釋//茬暇;多行注釋/* */

TypeScript和面向?qū)ο?/h2>

TS是一種面向?qū)ο蟮木幊陶Z言。
面向?qū)ο笾饕袃蓚€概念:對象和類寡喝。

  • 對象:對象是類的一個實例而钞,有狀態(tài)和行為。
  • 類:類是一個模板拘荡,描述一系列對象的行為和狀態(tài)。
  • 方法:方法是類的操作的實現(xiàn)步驟撬陵。

基礎(chǔ)類型

數(shù)據(jù)類型 關(guān)鍵字 描述
任意類型 any 聲明為any的變量可以賦予任意類型的值珊皿。
數(shù)字類型 number 雙精度64位浮點值【匏埃可以表示整數(shù)和分數(shù)蟋定,進制數(shù)。
字符串類型 string ‘和“表示字符串類型草添。`定義多行文本和內(nèi)嵌表達式驶兜。
布爾類型 boolean true和false
數(shù)組類型 聲明變量是數(shù)組。number[]Array<number>
元組 用來表示已知元素的數(shù)量和類型的數(shù)組远寸。各元素類型不必相同抄淑,對應(yīng)位置類型需相同。
枚舉 enum 枚舉類型用于定義數(shù)值集合驰后。enum Color {Red, Green, Blue};let c: Color = Color.Blue;console.log(c); // 輸出 2肆资??
void void 用于標識方法返回值的類型灶芝,表示該方法沒有返回值 郑原。
null null 空值
undefined undefined 未定義的值
never never never是其他類型(包括null和undefined)的子類型,代表從不會出現(xiàn)的值夜涕。

Any類型

任意值是TS針對編程時類型不明確的變量使用的數(shù)據(jù)類型犯犁,常用于以下情況:

  1. 變量的值會動態(tài)改變,如用戶的輸入女器,任意值類型可以讓這些變量跳過編譯階段的類型檢查酸役。
  2. 改寫現(xiàn)有代碼時,任意值允許在編譯時可選擇地包含或移除類型檢查。簇捍?只壳?
let x: any = 4;
x.ifItExists();    // 正確,ifItExists方法在運行時可能存在暑塑,但這里并不會檢查
x.toFixed();    // 正確
  1. 定義存儲各種類型數(shù)據(jù)的數(shù)組吼句。let arr: any[]=[1,false,'']

undefined

null和undefined是其他類型(包括void)的子類型,可以賦值給其他類型事格,賦值后的類型會編程null和undefined.而TS中啟用嚴格的空校驗(--strictNuilChecks)特性惕艳,就可以使得null和undefined只能被賦值給或本身對應(yīng)的類型。啟用 --strictNullChecks驹愚;let x: number | null | undefined;聯(lián)合類型

never類型

never是其他類型 (包括null和undefined)的子類型远搪,代表從不會出現(xiàn)的值。never類型的變量只能被never類型所賦值逢捺,在函數(shù)中它通常表現(xiàn)為拋出異乘ⅲ或無法執(zhí)行到終止點(無線循環(huán))。

let x: never;
let y: number;

// 運行錯誤劫瞳,數(shù)字類型不能轉(zhuǎn)為 never 類型
x = 123;

// 運行正確倘潜,never 類型可以賦值給 never類型
x = (()=>{ throw new Error('exception')})();

// 運行正確,never 類型可以賦值給 數(shù)字類型
y = (()=>{ throw new Error('exception')})();

// 返回值為 never 的函數(shù)可以是拋出異常的情況
function error(message: string): never {
    throw new Error(message);
}

// 返回值為 never 的函數(shù)可以是無法被執(zhí)行到的終止點的情況
function loop(): never {
    while (true) {}
}

TypeScript變量聲明

變量是一種使用方便的占位符志于,用于引用計算機地址涮因。可以把變量看作存儲數(shù)據(jù)的容器伺绽。
TS變量命名規(guī)則:

  • 變量名可以包含數(shù)字和字母养泡。
  • 除了下劃線 _和美元$符號外,不能包含其他特殊字符奈应,包括空格澜掩。
  • 不能以數(shù)字開頭。
//聲明變量的類型及初始值:
var uname:string = "Runoob";
//聲明變量的類型杖挣,無初始值输硝,變量值 會設(shè)置為undefined
var uname:string;
//聲明變量并賦初始值,不設(shè)類型程梦,可以是任意類型:
var uname = "Runoob";
//聲明變量不設(shè)類型和初始值点把,可以是任意類型,默認初始值為undefined
var uname;

注意:變量不要使用 name 否則會與 DOM 中的全局 window 對象下的 name 屬性出現(xiàn)了重名屿附。
TypeScript 遵循強類型郎逃,如果將不同的類型賦值給變量會編譯錯誤。

類型斷言

它之所以不被稱為類型轉(zhuǎn)換挺份,是因為轉(zhuǎn)換通常意味著某種運行時的支持褒翰。但類型斷言純粹是一個編譯時語法,它也是一種為編譯器提供關(guān)于如何分析代碼的方法。

類型推斷

當類型沒有給出時优训,TS編譯器利用類型推斷來推斷類型朵你。(類型一旦被推斷,后面再次賦值其他類型時揣非,會編譯錯誤)
如果由于缺乏聲明而不能推斷出類型抡医,則類型被默認動態(tài)any類型。

變量作用域

  • 全局作用域
  • 類作用域:這個變量也可以叫做字段.類變量聲明在類中早敬,類方法之外忌傻。可以通過類的對象來訪問變量搞监。類變量也可以是靜態(tài)的水孩,可以直接通過類名訪問。
  • 局部作用域
var global_num = 12          // 全局變量
class Numbers { 
   num_val = 13;             // 實例變量
   static sval = 10;         // 靜態(tài)變量
   
   storeNum():void { 
      var local_num = 14;    // 局部變量
   } 
} 
console.log("全局變量為: "+global_num)  
console.log(Numbers.sval)   // 靜態(tài)變量
var obj = new Numbers(); 
console.log("實例變量: "+obj.num_val)

TypeScript運算符

TypeScript條件語句

TypeScript循環(huán)

同JS類似

TypeScript函數(shù)

可選參數(shù)琐驴、默認參數(shù)和剩余參數(shù)

  1. 可選參數(shù)
    在TS函數(shù)中俘种,若定義了參數(shù),就必須傳入這些參數(shù)绝淡,除非將參數(shù)設(shè)置為可選安疗,可選參數(shù)使用?標識够委。function buildName(firstName: string, lastName?: string)
    可選參數(shù)必須跟在必須參數(shù)后。若都是可選參數(shù)就不做要求怖现。
  2. 默認參數(shù)
    可以設(shè)置參數(shù)的默認值茁帽,這樣在調(diào)用函數(shù)的時候,若不傳入該參數(shù)的值屈嗤,則使用默認參數(shù)function discount(price:number,rate:number = 0.50)潘拨。
    編譯后的js將在內(nèi)部if (rate === void 0) { rate = 0.50; }判斷rate的取值。
  3. 剩余參數(shù)
    當不確定要向函數(shù)傳入多少個參數(shù)饶号,剩余參數(shù)允許將一個不確定數(shù)量的參數(shù)作為一個數(shù)組傳入铁追。
    函數(shù)的最后一個命名參數(shù)以...為前綴,它將成為一個由剩余參數(shù)組成的數(shù)組茫船。

函數(shù)重載

重載是方法名字相同琅束,參數(shù)不同,返回類型可相同也可不同算谈。每個重載的方法(或者構(gòu)造函數(shù))的參數(shù)類型列表獨一無二涩禀。

  1. 參數(shù)類型不同:
    function disp(string):void;
    function disp(number):void;
  2. 參數(shù)數(shù)量不同
    function disp(n1:number):void;
    function disp(x:number,y:number):void;
  3. 參數(shù)類型順序不同
    function disp(n1:number,s1:string):void;
    function disp(s:string,n:number):void;
    如果參數(shù)類型不同,則參數(shù)類型應(yīng)設(shè)置為any然眼;參數(shù)數(shù)量不同艾船,將不同的參數(shù)設(shè)置為可選。
    同JS類似
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屿岂,隨后出現(xiàn)的幾起案子践宴,更是在濱河造成了極大的恐慌,老刑警劉巖爷怀,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阻肩,死亡現(xiàn)場離奇詭異,居然都是意外死亡霉撵,警方通過查閱死者的電腦和手機磺浙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徒坡,“玉大人撕氧,你說我怎么就攤上這事±辏” “怎么了伦泥?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锦溪。 經(jīng)常有香客問我不脯,道長,這世上最難降的妖魔是什么刻诊? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任防楷,我火速辦了婚禮,結(jié)果婚禮上则涯,老公的妹妹穿的比我還像新娘复局。我一直安慰自己,他們只是感情好粟判,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布亿昏。 她就那樣靜靜地躺著,像睡著了一般档礁。 火紅的嫁衣襯著肌膚如雪角钩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天呻澜,我揣著相機與錄音递礼,去河邊找鬼。 笑死羹幸,一個胖子當著我的面吹牛宰衙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播睹欲,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼供炼,長吁一口氣:“原來是場噩夢啊……” “哼一屋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袋哼,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤冀墨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涛贯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诽嘉,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年弟翘,在試婚紗的時候發(fā)現(xiàn)自己被綠了虫腋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡稀余,死狀恐怖悦冀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睛琳,我是刑警寧澤盒蟆,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站师骗,受9級特大地震影響历等,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辟癌,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一寒屯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧黍少,春花似錦寡夹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸳君。三九已至农渊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間或颊,已是汗流浹背砸紊。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留囱挑,地道東北人醉顽。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像平挑,于是被迫代替她去往敵國和親游添。 傳聞我的和親對象是個殘疾皇子系草,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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