[學習筆記] TypeScript入門基礎

基礎語法

ts程序組成部分

模塊、函數、變量、語句和表達式、注釋

一些注意

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

- ts區分大小寫

- 分號可選,建議使用

- 注釋與js相同

- ts是一種面向對象的編程語言

基礎類型

ts包含的數據類型

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

number - 數字類型

string - 字符串類型

boolean - 布爾類型

元素類型[] - 數組類型

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

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

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

[元素類型1, 元素類型2, ...] - 元組類型:元組類型用來表示已知元素數量和類型的數組,各元素的類型不必相同,但對應位置上但類型需要相同。

? ? let x: [string, number];

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

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

enum - 枚舉:枚舉類型用于定義數值集合

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

? ? let c: Color = Color.Blue;

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

void - void:用于標識方法返回值的類型,表示該方法沒有返回值

? ? function hello(): void {

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

????}

null - null:表示對象值缺失

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

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

Any 類型

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

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

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

3 - 定義存儲各種類型數據的數組時

Null 和Undefined

null

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

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

用typeof檢測null返回是object。

undefined

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

Null和Undefined是其他任何類型(包括void)的子類型,可以賦值給其他類型,如數字類型,此時,賦值后的類型會變成null或undedined。

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

never類型

never是其他類型的子類型,代表從不會出現的值。這意味著聲明為never類型的變量只能被never類型所賦值,在函數中它通常表現為拋出異常或無法執行到終止點(例如無限循環)

變量聲明

ts變量聲明

ts變量的命名規則與js變量的命名規則相同

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

ts是強類型語言,如果將不同的類型賦值給變量會編譯錯誤

類型斷言

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

類型推斷

當類型沒有給出時,TypeScript編譯器利用類型推斷來推斷類型。

如果由于缺乏聲明而不能推斷出類型,那么它的類型被視作默認的動態的any類型。

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

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

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

變量作用域

全局作用域

類作用域 - 這個變量也可稱為字段。類變量聲明在一個類里,但在類的外面,該變量可以通過類的對象來訪問。類變量也可以是靜態的,靜態的變量可以通過類名直接訪問。

局部作用域

函數

函數返回值

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

帶參數函數

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

可選參數

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

默認參數

function 函數名( 參數: 參數類型 = 默認值 ) {}

剩余參數

當我們不知道要向函數傳入多少個參數時,可以使用剩余參數來定義。

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

Lambda函數(箭頭函數)

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

參數可不指定類型,通過函數內來推斷參數類型

函數重載

重載就是方法名字相同,而參數不同,返回類型可以相同也可以不同。

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

* 如果參數類型不同,則參數類型應設置為any

* 如果參數數量不同,則可以將不同的參數設置為可選

TypeScript Number

Number 對象屬性

MAX_VALUE:可表示的最大的數,MAX_VALUE屬性值接近于 1.79E+308。大于MAX_VALUE的值代表“Infinity”

MIN_VALUE:可表示的最小的數,即最接近 0 的正整數(實際上不會變為 0 ),MIN_VALUE的值約為 5e-324,小于MIN_VALUE的值將會轉換為 0 。最大的負數是 -MIN_VALUE。

NaN:非數字值

NEGATIVE_INFINITY:負無窮大,溢出時的返回值。該值小于MIN_VALUE。

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

prototype:Number 對象的靜態屬性。可以向對象添加屬性和方法。

constructor:返回對創建此對象的Number函數的引用。

Number 對象方法

toExponential() :把對象的值轉為指數計數法

toFixed() : 把數字轉換為字符串,并可指定小數點的位數

toLocaleString() : 把數字轉換為字符串,使用本地數字格式順序

toPrecision() : 把數字格式轉為指定的長度

toString() :把數字轉換為字符串,使用指定的基數。數字的基數是2~36之間的整數。若省略該參數,則使用基數10.

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

TypeScript String

String 對象屬性

length

prototype

constructor

String 對象方法

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

TypeScript Array(數組)

聲明數組的語法格式

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

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

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

*如果數組聲明時未設置類型,則會被認為時any類型,在初始化時根據第一個元素的類型來推斷數組的類型。

Array 對象

Array 對象的構造函數接受兩種值:

表示數組大小的數值

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

數組結構

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

let [num1, num2] = arr

// num1 = 1, num2 = 2

數組迭代

for ... in

多維數組

let arr_name:datatype[] []

數組方法

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

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

TypeScript 元組

創建元組

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

元組運算

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

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

結構元組

let tup = ['a', 1];

let [a, b] = tup;

// a = 'a', b = 1

TypeScript 聯合類型

聯合類型可以通過管道將變量設置多種類型,賦值時可以根據設置的類型來賦值。

*只能賦值指定的類型

聯合類型 格式

datatype1 | datatype2 | datatype3 | ...

TypeScript 接口

定義接口

interface interface_name {}

接口和數組

接口中我們可以將數組的索引值和元素設置為不同類型,索引值類型可以是數字或字符串。

接口繼承

單接口繼承:Child_interface_name extends super_interface_name

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

TypeScript 類

類的模塊(類的數據成員)

字段 - 類里面聲明的變量,表示對象的有關數據

構造函數 - 類實例化時可調用,可以為類的對象分配內存

方法 - 對象要執行的操作

類的繼承

子類不能繼承父類的私有成員(方法和屬性)和構造函數。

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

語法:class child_class_name extends parent_class_name

static 關鍵字

static 關鍵字用于定義類的數據成員(屬性和方法)為靜態的,靜態成員可以直接通過類名調用。

instanceof 運算符

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

訪問控制修飾符

TypeScript中,可以使用訪問控制符來保護對類、變量、方法和構造方法的訪問。

支持三種不同的訪問權:

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

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

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

類和接口

類可以實現接口,使用關鍵詞 implements,可將接口字段作為類的屬性使用。

TypeScript 對象

TypeScript 類型模板

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

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

TypeScript 命名空間

命名空間定義了標識符的可見范圍,一個標識符可在多個名字空間中定義,它在不同名字空間中的含義是互不相關的。

命名空間使用 namespace 來定義。

如果需要在外部調用命名空間內的標識符,需要在標識符前添加 export 關鍵詞。

舉例:

? ? namespace 命名空間名字 {

? ? ? ? export interface 接口名 {}

? ? ? ? export class 類名 {}

? ? ? ? ... ...

????}

要在另一個命名空間調用 語法格式為:需要被調用的標識符所在命名空間.標識符

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

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

TypeScript 模塊

模塊的導入導出

export 導出 import 導入

? ? 舉例:

? ? 導出文件名:SomeInterface.ts?

? ? 導出代碼:export interface SomeInterface { }

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容