眾所皆知 JavaScript 是弱型別(Weak Typing)的語言,因此常會發生賦值錯誤導致編譯出錯,TypeScript 可視為進階版 JavaScript,提供靜態型別定義和檢查,目標是讓開發者在編寫 JavaScript 時擁有更好的開發體驗和更高的程式碼可讀性,提升專案穩定度。
基本說明
- TypeScript 是基於 JavaScript 的超集合(SuperSet),提供型別系統(Type System),能夠在開發時宣告型別
- 必須編譯成 JavaScript 檔案,瀏覽器、後端框架、Node.js 環境…才能閱讀
- 類型的定義可以減少 bug,能在編譯前預先檢查,避免許多運算錯誤
- TypeScript 只會進行靜態檢查,編譯時即使報錯,還是會產生編譯結果,仍然可以使用編譯後的 JavaScript 檔
環境建置與相關指令
- 安裝 TypeScript:
npm install -g typescript
- 進入專案資料夾,輸入
tsc —-init
建立 tsconfig.json
- 設定
rootDir
&outDir
路徑
- 開啟
inlineSourceMap: true
tsc
:將指令路徑 rootDir
內所有 .ts 檔編譯為 .js 檔存放於 outDir
tsc fileName.ts
:將指定路徑 rootDir
內 fileName.ts
檔編譯為 fileName.js
tsc —-watch
:進行動態監聽
原始資料型別(Primitive Data Types)
String
字串型別:const str: string = 'hello'
Number
數字型別,包括整數和浮點數:const num: number = 1000
Boolean
布林型別:const boo: boolean = true
Null
:const n: null = null
Undefined
:const un: undefined = undefined
Symbol
:ES6 新型別,是一個唯一且不可變的值,使用 Symbol() 函數來建立一個 Symbol 值,可以參考 這篇文章
物件型別(Object Types)
const obj: Object = { name: 'Claire', age: 18 } const obj2: { name: string, age: number } = { name: 'Claire', age: 18 }
|
使用型別搭配中括號 []
表示法
const arr: number[] = [ 111, 222 ]; const arr2: string[][] = [ [ 'a' ], [ 'b' ] ];
|
或是陣列泛型(Array Generic)Array<type>
表示法
const arr3: Array<boolean> = [ true, false ];
|
function hello(a: string, b: string) { return a + b; }
function hello2(a: number, b: number): number { return a + b; }
function hello3(a: number, b: boolean, c: string) { return 10000000; }
function hello4(name: string, age?: number) { return age; }
|
『選填』的參數如果沒加上判斷會拋錯,因參數有可能為 undefined
,見以下範例
function hello4(name: string, age?: number) { return age + 1; }
|
須加上判斷條件,改寫如下
function hello4(name: string, age?: number) { if (age === undefined) { return 1; } return age + 1; }
|
TypeScript 特有型別
Any
任意型別,等同於不定義型別,可以賦值給任何型別
let anyVar: any = true; anyVar = 18; anyVar = 'hello';
let str: string; str = anyVar;
|
Unknown
:類似 any
型別,但 any
可以賦值給任何型別,unknown
只能賦值給 any
和自己
let unknownVar: unknown = true; unknownVar = 18; unknownVar = 'hello';
let str: string; str = unknownVar;
let anyVar: any; anyVar = unknownVar;
|
Never
:函式發生無窮迴圈,或是出現例外狀況拋錯誤
function throwError(): never { throw new Error('error'); }
|
function hello(a: string, b: string): void { alert(a + b); }
function hello2(a: number, b: number) { console.log(a + b); }
|
瀏覽器 DOM 與 BOM 型別
HTMLElement
:所有 HTML 元素的基本型別,包含 <div>
、<p>
、<span>
…
HTMLInputElement
:代表 <input>
元素
HTMLTextAreaElement
:代表 <textarea>
元素
HTMLAnchorElement
:代表 <a>
元素
HTMLFormElement
:代表 <form>
元素
HTMLSelectElement
:代表 <select>
元素
HTMLFormElement
:代表 <form>
元素
HTMLTableElement
:代表 <table>
元素
MouseEvent
:代表滑鼠事件
KeyboardEvent
:代表鍵盤事件
inputEvent
:代表輸入事件
FocusEvent
:代表焦點事件
參考資源:
https://willh.gitbook.io/typescript-tutorial/basics/primitive-data-types
https://www.youtube.com/watch?v=GinkGJZBHIY
評論