TS判斷類型詳解

一、基礎類型判斷

1、基礎類型判斷是TS最基本的功能。TS會在編譯過程中對基礎類型進行檢查,該類型是否符合聲明時的約定。

例如在聲明一個字元串類型時:

const name: string = '張三';

在這個例子中,我們聲明了一個字元串類型的變數name,並將其賦值為”張三”。TS將會在編譯時對其進行檢查,如果我們給它賦值為數字,就會報錯。

2、當我們聲明一個變數時,如果沒有明確給它賦值,那麼TS就會根據基礎類型判斷為undefined類型。例如:

let age: number;
console.log(age); // 輸出undefined

在這個例子中,我們聲明了一個數值類型的變數age,但是沒有明確給它賦值,因此TS會將它判斷為undefined類型。

3、我們可以使用typeof語句來獲取變數的類型。例如:

const name: string = '張三';
console.log(typeof name); // 輸出字元串類型string

在這個例子中,我們使用typeof語句來獲取變數name的類型,獲取結果是字元串類型string。

二、函數參數類型判斷

1、在TS中,我們還可以對函數的參數類型進行判斷。我們需要在函數聲明時對其參數類型進行明確的聲明。例如:

function add(num1: number, num2: number): number {
  return num1 + num2;
}

在這個例子中,我們聲明了一個函數add,它有兩個參數num1和num2,都是數值類型,並且它的返回值也是數值類型。

2、當我們在函數調用時,如果傳入的參數類型與函數聲明時不一致,就會報錯。例如:

function printName(name: string): void {
  console.log(name);
}

printName(123); // 報錯:類型「123」的參數不能賦給類型「string」的參數

在這個例子中,我們聲明了一個函數printName,它的參數name是字元串類型,返回值是undefined類型。但是在調用函數時,我們傳入的參數是數字類型,就會報錯。

3、在函數參數中,我們還可以使用可選參數和默認參數。例如:

function printName(firstName: string, lastName?: string, age: number = 0): void {
  const fullName = lastName ? `${firstName} ${lastName}` : firstName;
  console.log(fullName, age);
}

printName('張', '三', 18);
printName('李', 22); // 輸出:李 0

在這個例子中,我們聲明了一個函數printName,它有三個參數。其中,第二個參數lastName是可選參數,第三個參數age是默認參數,默認為0。當我們調用函數時,如果不傳入lastName,就會輸出firstName和age的值,如果不傳入age,就會輸出firstName和默認的age值0。

三、類型守衛

1、類型守衛是TS中的一種語法,它用於在編程時對變數的類型進行判斷。例如:

function printName(name: string | number): void {
  if (typeof name === 'string') {
    console.log(name.length);
  } else {
    console.log(name.toFixed(2));
  }
}

printName('張三'); // 輸出3
printName(123.456); // 輸出123.46

在這個例子中,我們聲明了一個函數printName,它的參數name可以是字元串類型或數字類型。我們使用if語句對它們進行判斷,並針對不同的類型執行不同的操作。

2、還有另外一種類型守衛語法,它使用TS中的is語法。例如:

interface Car {
  name: string;
  price: number;
}

interface Bike {
  name: string;
  type: string;
}

function isCar(vehicle: Car | Bike): vehicle is Car {
  return 'price' in vehicle; 
}

function getPrice(vehicle: Car | Bike): number | undefined {
  if (isCar(vehicle)) {
    return vehicle.price;
  }
}

console.log(getPrice({name: '賓士', price: 500000})); // 輸出500000

在這個例子中,我們聲明了兩個介面Car和Bike。然後我們定義了一個isCar函數,該函數判斷傳入的參數是否為Car類型,並返回布爾值。然後我們又定義了一個getPrice函數,它的參數類型是Car或Bike,返回值類型是數值類型或undefined。在函數內部,我們使用isCar函數對參數進行類型判斷,如果是Car類型,返回參數的price屬性值。

四、類型斷言

1、類型斷言是TS中一個非常有用的概念。通過類型斷言,我們可以告訴TS編譯器一個變數的類型,即強制將變數類型轉換為我們所期望的類型。例如:

let str: any = 'hello world';
let len = (str).length;

console.log(len); // 輸出11

在這個例子中,我們先聲明了一個any類型的變數str,並賦值為字元串類型。然後我們使用類型斷言來強制將其類型轉為字元串類型。接下來我們又聲明了一個變數len,將str的length屬性賦值給它。

2、我們還可以使用另一種語法來進行類型斷言,即使用as語法。例如:

let str: any = 'hello world';
let len = (str as string).length;

console.log(len); // 輸出11

在這個例子中,我們使用as語法對變數str進行類型斷言,將其轉為字元串類型。然後我們又聲明了一個變數len,將str的length屬性賦值給它。

五、泛型類型判斷

1、泛型是TS中一個非常重要的概念,它可以將類型參數化,從而使得函數或類可以適應不同的數據類型。在泛型函數或類中,TS可以根據傳入的類型參數進行類型判斷。

function identity(arg: T): T {
  return arg;
}

let str = identity('hello world');
let num = identity(123);

console.log(typeof str, typeof num); // 輸出string number

在這個例子中,我們聲明了一個泛型函數identity,它有一個類型參數T,參數類型和返回值類型都是T類型。在函數的返回語句中,我們直接返回arg參數,這裡arg的類型是T,所以返回值的類型也是T。當我們在調用函數時,需要明確給類型參數賦值,例如傳入字元串類型和數字類型,輸出它們的類型。

2、除了函數外,我們還可以在類中使用泛型。例如:

class Container {
  private data: T[] = [];

  add(item: T) {
    this.data.push(item);
  }

  remove(item: T) {
    this.data.splice(this.data.indexOf(item), 1);
  }

  getItems() {
    return this.data;
  }
}

let container = new Container();
container.add('張三');
container.add('李四');
console.log(container.getItems()); // 輸出['張三', '李四']

在這個例子中,我們聲明了一個泛型類Container,它有一個類型參數T,成員變數data是一個T類型的數組。然後我們又聲明了三個方法add、remove和getItems,它們的參數和返回值都是T類型。在調用這個類時,我們需要明確給類型參數賦值,例如傳入字元串類型,調用add方法向數組中添加兩個字元串,然後調用getItems方法獲取數組中的所有元素。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/158506.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-19 00:42
下一篇 2024-11-19 00:42

相關推薦

  • int類型變數的細節與注意事項

    本文將從 int 類型變數的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變數進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變數。 一、定義與聲明 int…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python基本數字類型

    本文將介紹Python中基本數字類型,包括整型、布爾型、浮點型、複數型,並提供相應的代碼示例以便讀者更好的理解。 一、整型 整型即整數類型,Python中的整型沒有大小限制,所以可…

    編程 2025-04-29
  • Python中的Bool類型判斷

    本篇文章旨在講解Python中的Bool類型判斷。在Python中,Bool類型是經常使用的一種類型,因此掌握其用法非常重要。 一、True和False 在Python中,True…

    編程 2025-04-29
  • Vue TS工程結構用法介紹

    在本篇文章中,我們將從多個方面對Vue TS工程結構進行詳細的闡述,涵蓋文件結構、路由配置、組件間通訊、狀態管理等內容,並給出對應的代碼示例。 一、文件結構 一個好的文件結構可以極…

    編程 2025-04-29
  • Python函數類型有哪些

    本文將從以下幾個方面詳細闡述Python函數類型。 一、內置函數 Python的內置函數是指在Python編程語言中提供的可以直接使用的函數,不需要通過導入模塊等方式引入。 部分常…

    編程 2025-04-29
  • Python變數類型用法介紹

    Python是一種解釋型編程語言,它提供了豐富的數據類型,包括數字、字元串、列表、元組、集合、字典等。Python變數類型的定義是Python程序開發的基礎,本文將從以下幾個方面對…

    編程 2025-04-28
  • Python中的整數類型int類總覽

    本文將從多個方面,對Python中的整數類型int類進行全面介紹和闡述。 一、數據類型及基本操作 在Python中,整數類型的數據類型為int。在Python3.x中,整數類型的范…

    編程 2025-04-28
  • Python查詢變數類型的函數

    本文將從多個方面詳細闡述Python中查詢變數類型的函數,主要包括以下幾點: 一、type()函數 type()函數是Python內置的函數,用於查詢變數的類型。它的使用非常簡單,…

    編程 2025-04-28
  • 為什麼Python函數定義中沒有對參數指定類型?

    Python是一種強類型語言,也就是說語言本身會強制要求變數的類型。但是在Python函數定義中,卻沒有要求對參數指定類型。這是為什麼呢? 一、簡化函數定義 Python語言簡單明…

    編程 2025-04-28

發表回復

登錄後才能評論