[學(xué)習(xí)筆記] TypeScript入門基礎(chǔ)

基礎(chǔ)語法

ts程序組成部分

模塊、函數(shù)榛斯、變量蔓钟、語句和表達(dá)式永票、注釋

一些注意

- ts會忽略程序中的空格、制表符和換行符

- ts區(qū)分大小寫

- 分號可選滥沫,建議使用

- 注釋與js相同

- ts是一種面向?qū)ο蟮木幊陶Z言

基礎(chǔ)類型

ts包含的數(shù)據(jù)類型

any - 任意類型:聲明為any的變量可以賦予任意類型的值

number - 數(shù)字類型

string - 字符串類型

boolean - 布爾類型

元素類型[] - 數(shù)組類型

????let arr: number[] = [1, 2]

Array<元素類型> - 數(shù)組類型(使用數(shù)組泛型)?

????let arr: Array<number> = [1, 2]

[元素類型1, 元素類型2, ...] - 元組類型:元組類型用來表示已知元素數(shù)量和類型的數(shù)組侣集,各元素的類型不必相同,但對應(yīng)位置上但類型需要相同兰绣。

? ? let x: [string, number];

? ? x = ['string', 1];? ? // 正常運行

? ? x = [1, 'string'];? ? //? 報錯

enum - 枚舉:枚舉類型用于定義數(shù)值集合

? ? enum Color {Red, Green, Blue};

? ? let c: Color = Color.Blue;

? ? console.log(c);? ?// 2

void - void:用于標(biāo)識方法返回值的類型世分,表示該方法沒有返回值

? ? function hello(): void {

? ? ? ? alert('Hello World!')

????}

null - null:表示對象值缺失

undefined - undefined:用于初始化變量為一個未定義的值

never - never:never是其他類型(包括null和undefined)的子類型,代表從不會出現(xiàn)的值

Any 類型

任意值是TypeScript針對編程時類型不明確的變量使用的一種數(shù)據(jù)類型缀辩,它常用于以下三種情況:

1 - 變量的值會動態(tài)改變時臭埋,比如來自用戶的輸入,任意值類型可以讓這些變量跳過編譯階段的類型檢查

2 - 改寫現(xiàn)有代碼時臀玄,任意值允許在編譯時可選擇地包含或移除類型檢查

3 - 定義存儲各種類型數(shù)據(jù)的數(shù)組時

Null 和Undefined

null

在JavaScript中null表示“什么都沒有”

在TypeScript中null時一個只有一個值的特殊類型瓢阴,表示一個空對象引用。

用typeof檢測null返回是object健无。

undefined

在JavaScript中荣恐,undefined是一個已聲明但未賦值的變量。

Null和Undefined是其他任何類型(包括void)的子類型累贤,可以賦值給其他類型叠穆,如數(shù)字類型,此時畦浓,賦值后的類型會變成null或undedined痹束。

而在TypeScript中啟用嚴(yán)格的空校驗(--strictNullChecks)特性,就使得null和undefined只能被賦值給void或本身對應(yīng)的類型讶请。

never類型

never是其他類型的子類型祷嘶,代表從不會出現(xiàn)的值屎媳。這意味著聲明為never類型的變量只能被never類型所賦值,在函數(shù)中它通常表現(xiàn)為拋出異陈畚。或無法執(zhí)行到終止點(例如無限循環(huán))

變量聲明

ts變量聲明

ts變量的命名規(guī)則與js變量的命名規(guī)則相同

變量不要使用name否則會與DOM中的全局window對象下的name屬性出現(xiàn)重名

ts是強(qiáng)類型語言烛谊,如果將不同的類型賦值給變量會編譯錯誤

類型斷言

類型斷言可以用來手動制定一個值的類型,即允許變量從一種類型更改為另一種類型嘉汰。

類型推斷

當(dāng)類型沒有給出時丹禀,TypeScript編譯器利用類型推斷來推斷類型。

如果由于缺乏聲明而不能推斷出類型鞋怀,那么它的類型被視作默認(rèn)的動態(tài)的any類型双泪。

let num = 2;? ?// 類型推斷為 number

num = '2';? ?// 編譯錯誤

編譯錯誤原因:第一行代碼num的類型已被推斷為number了,不能再將字符型賦值給num密似。

變量作用域

全局作用域

類作用域 - 這個變量也可稱為字段焙矛。類變量聲明在一個類里,但在類的外面残腌,該變量可以通過類的對象來訪問村斟。類變量也可以是靜態(tài)的,靜態(tài)的變量可以通過類名直接訪問抛猫。

局部作用域

函數(shù)

函數(shù)返回值

function 函數(shù)名(): 返回值類型 {}

帶參數(shù)函數(shù)

function 函數(shù)名( 參數(shù)1: 參數(shù)1的類型, 參數(shù)2: 參數(shù)2的類型, ... ) {}

可選參數(shù)

function 函數(shù)名( 參數(shù)?: 參數(shù)類型 ) {} - 在形參后加上?蟆盹,該參數(shù)即作為可選參數(shù)

默認(rèn)參數(shù)

function 函數(shù)名( 參數(shù): 參數(shù)類型 = 默認(rèn)值 ) {}

剩余參數(shù)

當(dāng)我們不知道要向函數(shù)傳入多少個參數(shù)時,可以使用剩余參數(shù)來定義闺金。

function 函數(shù)名( ...參數(shù)數(shù)組: 數(shù)組類型 ) {}

Lambda函數(shù)(箭頭函數(shù))

let 變量名 = (參數(shù): 參數(shù)類型) => {}

參數(shù)可不指定類型逾滥,通過函數(shù)內(nèi)來推斷參數(shù)類型

函數(shù)重載

重載就是方法名字相同,而參數(shù)不同掖看,返回類型可以相同也可以不同匣距。

每個重載的方法(或構(gòu)造函數(shù))都必須有一個獨一無二的參數(shù)類型列表面哥。

* 如果參數(shù)類型不同哎壳,則參數(shù)類型應(yīng)設(shè)置為any

* 如果參數(shù)數(shù)量不同,則可以將不同的參數(shù)設(shè)置為可選

TypeScript Number

Number 對象屬性

MAX_VALUE:可表示的最大的數(shù)尚卫,MAX_VALUE屬性值接近于 1.79E+308归榕。大于MAX_VALUE的值代表“Infinity”

MIN_VALUE:可表示的最小的數(shù),即最接近 0 的正整數(shù)(實際上不會變?yōu)?0 )吱涉,MIN_VALUE的值約為 5e-324刹泄,小于MIN_VALUE的值將會轉(zhuǎn)換為 0 。最大的負(fù)數(shù)是 -MIN_VALUE怎爵。

NaN:非數(shù)字值

NEGATIVE_INFINITY:負(fù)無窮大特石,溢出時的返回值。該值小于MIN_VALUE鳖链。

POSITIVE_INFINITY:正無窮大姆蘸,溢出時的返回值。該值大于MAX_VALUE。

prototype:Number 對象的靜態(tài)屬性逞敷】袂兀可以向?qū)ο筇砑訉傩院头椒ā?/p>

constructor:返回對創(chuàng)建此對象的Number函數(shù)的引用。

Number 對象方法

toExponential() :把對象的值轉(zhuǎn)為指數(shù)計數(shù)法

toFixed() : 把數(shù)字轉(zhuǎn)換為字符串推捐,并可指定小數(shù)點的位數(shù)

toLocaleString() : 把數(shù)字轉(zhuǎn)換為字符串裂问,使用本地數(shù)字格式順序

toPrecision() : 把數(shù)字格式轉(zhuǎn)為指定的長度

toString() :把數(shù)字轉(zhuǎn)換為字符串,使用指定的基數(shù)牛柒。數(shù)字的基數(shù)是2~36之間的整數(shù)堪簿。若省略該參數(shù),則使用基數(shù)10.

valueOf() :返回一個Number對象的原始數(shù)字值

TypeScript String

String 對象屬性

length

prototype

constructor

String 對象方法

localeCompare() - 用本地特定對順序來比較兩個字符串 - 相同返回0 不同返回-1

TypeScript Array(數(shù)組)

聲明數(shù)組的語法格式

let array_name [:datatype];? ?// 聲明

array_name = [val1, val2, val3, ...];? ?// 初始化

let array_name [:datatype] = [val1, val2, val3, ...];? ?// 直接在聲明時初始化

*如果數(shù)組聲明時未設(shè)置類型皮壁,則會被認(rèn)為時any類型戴甩,在初始化時根據(jù)第一個元素的類型來推斷數(shù)組的類型。

Array 對象

Array 對象的構(gòu)造函數(shù)接受兩種值:

表示數(shù)組大小的數(shù)值

初始化的數(shù)組列表 元素使用逗號隔開

數(shù)組結(jié)構(gòu)

let arr:number[] = [1, 2];

let [num1, num2] = arr

// num1 = 1, num2 = 2

數(shù)組迭代

for ... in

多維數(shù)組

let arr_name:datatype[] []

數(shù)組方法

reduce() - 將數(shù)組元素計算為一個值(從左到右)

reduceRight() - 將數(shù)組元素計算為一個值(從右到左)

TypeScript 元組

創(chuàng)建元組

let tuple_name = [val1, val2, val3, ...]

元組運算

push() - 向元組尾部添加元素

pop() - 從元組尾部移除元素闪彼,并返回移除的元素

結(jié)構(gòu)元組

let tup = ['a', 1];

let [a, b] = tup;

// a = 'a', b = 1

TypeScript 聯(lián)合類型

聯(lián)合類型可以通過管道將變量設(shè)置多種類型甜孤,賦值時可以根據(jù)設(shè)置的類型來賦值。

*只能賦值指定的類型

聯(lián)合類型 格式

datatype1 | datatype2 | datatype3 | ...

TypeScript 接口

定義接口

interface interface_name {}

接口和數(shù)組

接口中我們可以將數(shù)組的索引值和元素設(shè)置為不同類型畏腕,索引值類型可以是數(shù)字或字符串缴川。

接口繼承

單接口繼承:Child_interface_name extends super_interface_name

多接口繼承:Child_interface_name extends super_interface1_name, super_interface2_name, ...

TypeScript 類

類的模塊(類的數(shù)據(jù)成員)

字段 - 類里面聲明的變量,表示對象的有關(guān)數(shù)據(jù)

構(gòu)造函數(shù) - 類實例化時可調(diào)用描馅,可以為類的對象分配內(nèi)存

方法 - 對象要執(zhí)行的操作

類的繼承

子類不能繼承父類的私有成員(方法和屬性)和構(gòu)造函數(shù)把夸。

一次只能繼承一個類,不支持繼承多個類铭污,但支持多重繼承(A繼承B恋日,B繼承C)。

語法:class child_class_name extends parent_class_name

static 關(guān)鍵字

static 關(guān)鍵字用于定義類的數(shù)據(jù)成員(屬性和方法)為靜態(tài)的嘹狞,靜態(tài)成員可以直接通過類名調(diào)用岂膳。

instanceof 運算符

instanceof 運算符用于判斷對象是否是指定的類型,如果是返回true磅网,否則返回false谈截。

訪問控制修飾符

TypeScript中,可以使用訪問控制符來保護(hù)對類涧偷、變量簸喂、方法和構(gòu)造方法的訪問。

支持三種不同的訪問權(quán):

public(默認(rèn)) - 公有 可以在任何地方被訪問

protected - 受保護(hù) 可以被其自身以及其子類和父類訪問

private - 私有 只能被其定義所在的類訪問

類和接口

類可以實現(xiàn)接口燎潮,使用關(guān)鍵詞 implements喻鳄,可將接口字段作為類的屬性使用。

TypeScript 對象

TypeScript 類型模板

TypeScript 中的對象必須是特定類型的實例确封。

在JavaScript中如果需要在對象中添加方法除呵,可以直接 object.方法名 = ... 添加唉锌,但是在TypeScript中使用該方法會出現(xiàn)編譯錯誤,因為TypeScript 中的對象必須是特定類型的實例竿奏。

TypeScript 命名空間

命名空間定義了標(biāo)識符的可見范圍袄简,一個標(biāo)識符可在多個名字空間中定義,它在不同名字空間中的含義是互不相關(guān)的泛啸。

命名空間使用 namespace 來定義绿语。

如果需要在外部調(diào)用命名空間內(nèi)的標(biāo)識符,需要在標(biāo)識符前添加 export 關(guān)鍵詞候址。

舉例:

? ? namespace 命名空間名字 {

? ? ? ? export interface 接口名 {}

? ? ? ? export class 類名 {}

? ? ? ? ... ...

????}

要在另一個命名空間調(diào)用 語法格式為:需要被調(diào)用的標(biāo)識符所在命名空間.標(biāo)識符

如果一個命名空間在另一個TypeScript文件中吕粹,則需要使用三斜杠 /// 引用它。

? ? /// <reference path = "SomeFileName.ts" />

TypeScript 模塊

模塊的導(dǎo)入導(dǎo)出

export 導(dǎo)出 import 導(dǎo)入

? ? 舉例:

? ? 導(dǎo)出文件名:SomeInterface.ts?

? ? 導(dǎo)出代碼:export interface SomeInterface { }

? ? 導(dǎo)入代碼:import someInterfaceRef = require("./SomeInterface")

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岗仑,一起剝皮案震驚了整個濱河市匹耕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荠雕,老刑警劉巖稳其,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異炸卑,居然都是意外死亡既鞠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門盖文,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘱蛋,“玉大人,你說我怎么就攤上這事五续∪髅簦” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵疙驾,是天一觀的道長凶伙。 經(jīng)常有香客問我,道長荆萤,這世上最難降的妖魔是什么镊靴? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任铣卡,我火速辦了婚禮链韭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘煮落。我一直安慰自己敞峭,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布蝉仇。 她就那樣靜靜地躺著旋讹,像睡著了一般殖蚕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沉迹,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天睦疫,我揣著相機(jī)與錄音,去河邊找鬼鞭呕。 笑死蛤育,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的葫松。 我是一名探鬼主播瓦糕,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腋么!你這毒婦竟也來了咕娄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤珊擂,失蹤者是張志新(化名)和其女友劉穎圣勒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摧扇,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡灾而,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扳剿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旁趟。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖庇绽,靈堂內(nèi)的尸體忽然破棺而出锡搜,到底是詐尸還是另有隱情,我是刑警寧澤瞧掺,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布耕餐,位于F島的核電站,受9級特大地震影響辟狈,放射性物質(zhì)發(fā)生泄漏肠缔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一哼转、第九天 我趴在偏房一處隱蔽的房頂上張望明未。 院中可真熱鬧,春花似錦壹蔓、人聲如沸趟妥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽披摄。三九已至亲雪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疚膊,已是汗流浹背义辕。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留寓盗,地道東北人终息。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像贞让,于是被迫代替她去往敵國和親周崭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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