開發(fā)環(huán)境
1.安裝Node.js
https://nodejs.org/zh-cn/
通過 node -v 命令查看本機(jī)是否安裝,如果沒有安裝,參考node.js安裝指南 根據(jù)電腦系統(tǒng)環(huán)境進(jìn)行安裝
2.初始化一個 TypeScript 項(xiàng)目
mkdir project && cd project
npm init -y
npm install -save-dev typescript
3.創(chuàng)建 tsconfig.json 文件
方法一:在vscode 中,點(diǎn)擊右下角版本號

方法二:
node_modules/.bin/tsc --init --locale zg-CN
通過這種方法創(chuàng)建,tsconfig.json 包含所有編譯器參數(shù)以及參數(shù)說明
4.TS Playground 工具
https://www.typescriptlang.org/play
鼠標(biāo)懸停在類型名上查看其類型,ctrlctrl + click查看定義和引用
5.運(yùn)行 index.ts 文件
Node 不能直接運(yùn)行 TypeScript 文件,需要用轉(zhuǎn)換成 JavaScript 文件
執(zhí)行以下命令將 TypeScript 轉(zhuǎn)換為 JavaScript 代碼:
tsc index.ts
使用 node 命令來執(zhí)行 index.js 文件
node index.js
6.ts-node 的安裝和使用
使用 ts-node 插件,不用再編譯,而使用 ts-node 就可以直接看到編寫結(jié)果
全局安裝
npm install -g ts-node
使用
ts-node index.ts
基礎(chǔ)知識
1.TypeScript 程序由以下幾個部分組成
- 模塊
- 函數(shù)
- 變量
- 語句和表達(dá)式
- 注釋
2.空白和換行
TypeScript 會忽略程序中出現(xiàn)的空格、制表符和換行符。
空格、制表符通常用來縮進(jìn)代碼,使代碼易于閱讀和理解。
3.TypeScript 區(qū)分大小寫
TypeScript 區(qū)分大寫和小寫字符。
4.分號是可選的
每行指令都是一段語句,你可以使用分號或不使用, 分號在 TypeScript 中是可選的,建議使用。
如果語句寫在同一行則一定需要使用分號來分隔,否則會報錯。
5.TypeScript 注釋
- 單行注釋 ( // ) ? 在 // 后面的文字都是注釋內(nèi)容。
- 多行注釋 (/* */) ? 這種注釋可以跨越多行。
基礎(chǔ)類型
| 數(shù)據(jù)類型 | 關(guān)鍵字 | 描述 |
|---|---|---|
| 任意 | any | 聲明為 any 的變量可以賦予任意類型的值。 |
| 數(shù)字 | number | 雙精度 64 位浮點(diǎn)值。它可以用來表示整數(shù)和分?jǐn)?shù)。 |
| 字符串 | string | 一個字符系列,使用單引號(')或雙引號(")來表示字符串類型。反引號(`)來定義多行文本和內(nèi)嵌表達(dá)式。 |
| 布爾 | boolean | 表示邏輯值:true 和 false。 |
| 數(shù)組 | 無 | 在元素類型后面加上[],或者使用數(shù)組泛型 |
| 元組 | 無 | 元組類型用來表示已知元素數(shù)量和類型的數(shù)組,各元素的類型不必相同,對應(yīng)位置的類型需要相同。 |
| 枚舉 | enum | 枚舉類型用于定義數(shù)值集合。 |
| void | void | 用于標(biāo)識方法返回值的類型,表示該方法沒有返回值。 |
| null | null | 表示對象值缺失。 |
| undefined | undefined | 用于初始化變量為一個未定義的值 |
| never | never | never 是其它類型(包括 null 和 undefined)的子類型,代表從不會出現(xiàn)的值。 |
值空間與類型空間
只包含類型聲明的 namespace 不會產(chǎn)生 JS 代碼,不會引入變量
instanceof 操作符只作用于值空間
如何判斷符號是在哪個空間?
轉(zhuǎn)譯后消失的符號 → 類型空間
-
作為類型注解、別名的符號 → 類型空間
( type T = typeof Person; const p: Person)
類型斷言后的符號 → 類型空間 ( target as/is HTMLElement )
const,、let、var 后面的符號 → 值空間
class、enum、namespace 后的符號 → 值空間 + 類型空間
有一些操作符在兩個空間都存在,但是含義完全不同:
typeof
在值空間,typeof 返后面表達(dá)式對應(yīng)的 JavaScript 類型的字符串表示
( string , number , bigint , boolean , symbol , undefined , object , function )在類型空間,typeof返回標(biāo)識符對應(yīng)的 TypeScript 類型
[ ] (索引訪問操作符 Indexed Access Operator)
在值空間,val[field] 或 val.field 返回 val 對應(yīng)屬性的值
在類型空間,Type[T] 返回對應(yīng) TS 類型
this關(guān)鍵字
在值空間,this 指向...比較復(fù)雜
在類型空間,this 可以作為類方法的返回值來實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用
&| 運(yùn)算符
在值空間表示 “按位與” 和 “按位或” (Bitwise AND,OR)
在類型空間表示類型的交叉和聯(lián)合
const
在值空間用來聲明常量
在類型空間與 as 連用,即 “as const” 常量斷言,收窄類型
extends
在值空間用于定義子類(class A extends B)
在類型空間用來進(jìn)行類型約束(T extends number)或接口繼承(interface A extends B)
in
在值空間用于for循環(huán)(for (key in object){ ...})和判斷屬性是否存在( name in person)
在類型空間用于映射類型的 key 的聲明(Mapped Type)