welcome to Cheeto's blog

0%

TypeScript 從零開始:原始型別

TypeScript 從零開始:原始型別

TypeScript 是 JavaScript 的超集合,將強型別帶入 JavaSript,並提供對 ES6 的支援,而 TypeScript 由 Microsoft 開發,程式開源於 GitHub 上。

學習資源參考 TypeScript 新手指南

什麼是超集合 ( SuperSet ) ?

示意圖 ↑

JavaScript 是一個語言的集合,但是 TypeScript 除了有完整 JavaScript 之外,自己又額外增加了各種功能,所以是 JavaScript 的超集合。

在 TS 的檔案當中是支援 ES6 的語法的,所以就算使用 ES6 也是沒有問題的,不過必須透過 TS 的編譯器才能編譯為 JS 檔,瀏覽器才能進行解讀。

原始資料型別

在 TypeScript 當中宣告變數時,可以透過 : 來檢查型別,那就讓我們繼續下去吧!

布林值 ( boolean )

正常的編譯的情況下會是這樣 ↓

1
2
3
4
5
// 編譯前
let booleanTS: boolean = true;

// 編譯後
var booleanTS = true;

那如果變數不是布林值呢?

1
2
3
4
5
6
7
8
// 編譯前
let booleanTS: boolean = { name: 'Cheeto' };

// 編譯時會跳錯: Type { name: 'Cheeto' } is not assignable to type 'boolean'.
// 但是就算是報錯了,還是會編譯出 JS 的檔案唷!

// 編譯後
var booleanTS = { name: 'Cheeto' };

這邊就能看出 TypeScript 的其中一個特性,它是會通知你哪裡出現狀況,但是並不會強制修改。

數值 ( Number )

1
2
3
4
5
6
7
8
9
// 編譯前
let basicNum: number = 123;
let nanNum: number = NaN;
let infinityNum: number = Infinity;

// 編譯後
var basicNum = 123;
var nanNum = NaN;
var infinityNum = Infinity;

Number 當中只要是 JS 的基本型別當中是屬於 Number 的就不會出現錯誤的資訊,都是能夠正常編譯。

字串 ( String )

1
2
3
4
5
6
7
8
9
// 編譯前
let myName: string = 'Cheeto';
let myBro: string = 'Nian'
let str: string = `My name is ${ myName }, and my bro name is ${ myBro }.`

// 編譯後
var myName = 'Cheeto';
var myBro = 'Nian';
var str = "My name is " + myName + ", and my bro name is " + myBro + ".";

這邊可以看到我在編譯前使用的是 ES6 的樣板字面值,但是在編譯過程中它會轉換成透過 + 的方式組成的字串。

空值 ( Void )

在 TS 當中,可以使用 Void 來宣告沒有回傳值的函式來進行查驗。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 編譯前
const newFunc = (): void => {
const myName = 'Cheeto';
const myBro = 'Nian';
}

function func1 (): void {
const myName = 'Cheeto';
const myBro = 'Nian';
}

// 編譯後
var newFunc = function () {
var myName = 'Cheeto';
var myBro = 'Nian';
}
function func1() {
var myName = 'Cheeto';
var myBro = 'Nian';
}

Null & Undefined

在 TS 當中,也能利用 Null & Undefined 來進行型別辨認:

1
2
3
4
5
6
7
// 編譯前
let undefinedTS: undefined = undefined;
let nullTS: null = null;

// 編譯後
var undefinedTS = undefined;
var nullTS = null;