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)鍵字
語法
- 空白和換行
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ù)類型犯犁,常用于以下情況:
- 變量的值會動態(tài)改變,如用戶的輸入女器,任意值類型可以讓這些變量跳過編譯階段的類型檢查酸役。
- 改寫現(xiàn)有代碼時,任意值允許在編譯時可選擇地包含或移除類型檢查。簇捍?只壳?
let x: any = 4;
x.ifItExists(); // 正確,ifItExists方法在運行時可能存在暑塑,但這里并不會檢查
x.toFixed(); // 正確
- 定義存儲各種類型數(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ù)
- 可選參數(shù)
在TS函數(shù)中俘种,若定義了參數(shù),就必須傳入這些參數(shù)绝淡,除非將參數(shù)設(shè)置為可選安疗,可選參數(shù)使用?標識够委。function buildName(firstName: string, lastName?: string)
可選參數(shù)必須跟在必須參數(shù)后。若都是可選參數(shù)就不做要求怖现。 - 默認參數(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的取值。 - 剩余參數(shù)
當不確定要向函數(shù)傳入多少個參數(shù)饶号,剩余參數(shù)允許將一個不確定數(shù)量的參數(shù)作為一個數(shù)組傳入铁追。
函數(shù)的最后一個命名參數(shù)以...為前綴,它將成為一個由剩余參數(shù)組成的數(shù)組茫船。
函數(shù)重載
重載是方法名字相同琅束,參數(shù)不同,返回類型可相同也可不同算谈。每個重載的方法(或者構(gòu)造函數(shù))的參數(shù)類型列表獨一無二涩禀。
- 參數(shù)類型不同:
function disp(string):void;
function disp(number):void;
- 參數(shù)數(shù)量不同
function disp(n1:number):void;
function disp(x:number,y:number):void;
- 參數(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類似