iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Modern Web

TypeScript 魔法 - 喚醒你的程式碼靈感系列 第 3

Day03 - TypeScript 核心的 Type - number、string & boolean

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20230918/20152047v6YktfehYM.png

TypeScript 支援多種主要的型別,這些型別可以用於變數聲明、函式引數(參數)、函式回傳值等
今天我們將討論 TypeScript 中一些主要型別,包括 numberstringboolean

數字型別(number)

number 型別用來表示數字,它可以包含整數和浮點數。以下定義 number 型別的變數:

const count: number = 30;

數學運算

const count: number = 10 + 32;

小數點

const count: number = 99.99;

二進制和十六進制

const binary: number = 0b1010;
const hex: number = 0x1F;

NaN

const count: number = NaN;

其中 NaN 是 JavaScript 中一個特殊數值,它表示一個無效或為定義的數字值,雖然名稱中包含非數字,但實際型別是 number

字串型別(string)

string 型別用來表示字串,它是文字的序列。以下定義 string 型別的變數:

const message: string = 'Hello, TypeScript!';

字串拼接

const firstName: string = 'Rousong';
const lastName: string = 'Chen';

const fullName: string = firstName + " " + lastName;

樣板字面值

const greeting: string = `Hello, ${firstName} ${lastName}`;

布林型別(boolean)

boolean 型別用來表示布林值,即 truefalse。以下定義 boolean 型別的變數:

const isLoggedin: boolean = true;

boolean 運算

const isActive: boolean = false;
const isSuspended: boolean = true;

const access: boolean = isActive && !isSuspended;

使用 TypeScript 主要型別的範例函式

JavaScript 為例:

function add(n1, n2) {
  return n1 + n2;
}

var number1 = 5;
var number2 = 2.8;

var result = add(number1, number2);
console.log(result); // 7.8

TypeScript 為例:

function add(n1: number, n2: number) {
  return n1 + n2;
}

const number1 = 5;
const number2 = 2.8;

const result = add(number1, number2);
console.log(result); // 7.8

透過上方例子兩個數字相加的運算沒有問題,讓我們改寫 number1 變數的型別看看會有什麼變化。

JavaScript 為例:

function add(n1, n2) {
  return n1 + n2;
}

var number1 = '5';
var number2 = 2.8;

var result = add(number1, number2);
console.log(result); // 52.8

TypeScript 為例:

function add(n1: number, n2: number) {
  return n1 + n2;
}

const number1 = '5';
const number2 = 2.8;

const result = add(number1, number2);
console.log(result); // 52.8

https://ithelp.ithome.com.tw/upload/images/20230918/20152047QudvK986np.png
執行編譯時 number1 出現錯誤,意味著嘗試將一個型別 string 的值給一個型別 number 的參數,而 TypeScript 不允許這樣的賦值操作,型別不相容,然而 JavaScript 不會有這個錯誤,在第一天的文章中有提到 JavaScript 是一種弱型別語言,變數型別可以自由變化。

我們進一步改寫程式碼,加上 boolean 型別的判斷,確保參數型別正確性。

JavaScript 為例:

function add(n1, n2, showResult) {
  if (typeof n1 !== 'number' || typeof n2 !== 'number') {
    throw new Error('型別錯誤');
  }

  var result = n1 + n2;

  if (showResult) {
    console.log(result); // 7.8
  }
}

var number1 = 5;
var number2 = 2.8;
var printResult = true;

var result = add(number1, number2, printResult);

TypeScript 為例:

function add(n1: number, n2: number, showResult: boolean) {
  if (typeof n1 !== 'number' || typeof n2 !== 'number') {
    throw new Error('型別錯誤');
  }

  const result = n1 + n2;

  if (showResult) {
    console.log(result); // 7.8
  }
}

const number1 = 5;
const number2 = 2.8;
const printResult = true;

const result = add(number1, number2, printResult);

型別推斷

型別推斷是 TypeScript 的一個特性,允許不顯示指定變數型別的情況下,自動推斷變數的型別,
這使得程式碼編寫更加簡潔和容易,同時保持了靜態型別檢查的優勢。什麼意思呢?

讓我們透過一個簡單的範例說明。

let count: number = 30;

上面的程式碼實際上等同於下面的程式碼,只是省略了型別推斷的部分。

let count = 30; // 變數 count 會自動推斷型別為 number

https://ithelp.ithome.com.tw/upload/images/20230918/201520476JuLDyAhGZ.png

本日重點

  1. NaN 實際型別是 number
  2. 嘗試將一個型別 string 的值給一個型別 number 的參數,TypeScript 不允許這樣的賦值操作,然而 JavaScript 不會有這個問題。
  3. TypeScript 自動型別推斷的特性使程式碼更加簡潔。

參考


上一篇
Day02 - 安裝 TypeScript
下一篇
Day04 - 探索物件型別的奧妙
系列文
TypeScript 魔法 - 喚醒你的程式碼靈感30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言