」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 掌握 TypeScript 介面:附有實際範例的綜合指南

掌握 TypeScript 介面:附有實際範例的綜合指南

發佈於2024-08-18
瀏覽:358

Mastering TypeScript Interfaces: A Comprehensive Guide with Practical Examples

在 TypeScript 中,介面是用來定義物件形狀的強大工具。它們強制執行類型檢查,確保您建立的物件遵循特定的結構。以下來看看常用介面的各種情況,並附有範例:

1. 定義物件形狀

介面通常用於定義物件的結構。這確保了任何附著於該介面的物件都將具有特定的屬性。

interface User {
  name: string;
  age: number;
  email: string;
}

const user: User = {
  name: "John Doe",
  age: 30,
  email: "[email protected]"
};

2. 可選屬性

介面可讓您使用 ? 定義可選屬性。象徵。這意味著該物件可能具有也可能不具有這些屬性。

interface Product {
  id: number;
  name: string;
  description?: string; // Optional property
}

const product: Product = {
  id: 1,
  name: "Laptop"
};

3. 只讀屬性

您可以將屬性定義為唯讀,這表示它們在初始化後無法變更。

interface Config {
  readonly apiUrl: string;
  timeout: number;
}

const config: Config = {
  apiUrl: "https://api.example.com",
  timeout: 5000
};

// config.apiUrl = "https://newapi.example.com"; // Error: Cannot assign to 'apiUrl' because it is a read-only property.

4. 函數型別

介面可用來定義函數的形狀,指定參數類型和傳回類型。

interface Login {
  (username: string, password: string): boolean;
}

const login: Login = (username, password) => {
  return username === "admin" && password === "admin123";
};

console.log(login("admin", "admin123")); // true

5. 擴充介面

接口可以擴展其他接口,允許透過組合現有的類型來創建複雜類型。

interface Person {
  name: string;
  age: number;
}

interface Employee extends Person {
  employeeId: number;
  department: string;
}

const employee: Employee = {
  name: "Alice",
  age: 28,
  employeeId: 12345,
  department: "Engineering"
};

6. 在類別中實作介面

類別可以實現接口,確保它們遵守接口的結構。

interface Animal {
  name: string;
  makeSound(): void;
}

class Dog implements Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  makeSound() {
    console.log("Woof! Woof!");
  }
}

const dog = new Dog("Buddy");
dog.makeSound(); // Woof! Woof!

7. 可索引類型

介面可以描述具有特定類型動態鍵屬性的物件。

interface StringArray {
  [index: number]: string;
}

const myArray: StringArray = ["Hello", "World"];
console.log(myArray[0]); // Hello

8. 混合型

介面可以定義既充當函數又充當具有屬性的物件的物件。

interface Counter {
  (start: number): void;
  interval: number;
  reset(): void;
}

const counter: Counter = (function (start: number) {
  console.log("Counter started at", start);
} as Counter);

counter.interval = 1000;
counter.reset = () => {
  console.log("Counter reset");
};

counter(10);
console.log(counter.interval); // 1000
counter.reset();

9. 介面合併

TypeScript 允許您合併同一介面的多個聲明,這在處理大型程式碼庫或程式庫時非常有用。

interface Box {
  height: number;
  width: number;
}

interface Box {
  color: string;
}

const myBox: Box = {
  height: 20,
  width: 15,
  color: "blue"
};

TypeScript 中的介面提供了一種靈活且強大的方式來定義和強制執行物件形狀,從而實現強大的類型檢查和清晰、可維護的程式碼。

版本聲明 本文轉載於:https://dev.to/shanu001x/mastering-typescript-interfaces-a-comprehensive-guide-with-practical-examples-m8h?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為開發人員和安全團隊提供主動的 AppSec 持續漏洞管理
    為開發人員和安全團隊提供主動的 AppSec 持續漏洞管理
    现代软件开发环境中哪些日益增长的网络安全风险让 CISO 忙碌? 开发人员和安全团队面临着越来越多的威胁,从复杂的开源和供应商控制的供应链攻击到 AI 生成的代码引入的漏洞,例如提示注入和 GitHub Copilot 的代码安全性差。现代应用程序通常严重依赖开源组件(例如在 npm、PyPI 或 ...
    程式設計 發佈於2024-11-06
  • 如何使用 React 對 MeteorJS 中的 Bootstrap Spacing 實用程式類別進行故障排除?
    如何使用 React 對 MeteorJS 中的 Bootstrap Spacing 實用程式類別進行故障排除?
    在 Bootstrap 中使用間距實用程式類別在 Bootstrap 中,間距實用程式類別可讓您輕鬆控制元素周圍的間距。但是,如果您在使用它們時遇到問題,這裡有一個指南可以幫助您解決。 更新的間距語法(Bootstrap 4 和 5)Bootstrap 4引入了間距實用程式類別的簡化語法:邊距:m{...
    程式設計 發佈於2024-11-06
  • 如何在Python中設定子程序的工作目錄?
    如何在Python中設定子程序的工作目錄?
    如何在Python中設定子程序的工作目錄在Python中,subprocess.Popen()函數允許您在Py thon中執行指令子程序。一個常見的要求是指定子程序的工作目錄。 問題:如何使用 subprocess.Popen() 設定子程序的工作目錄? 答案:要指定工作目錄,請使用 subproc...
    程式設計 發佈於2024-11-06
  • Pandas 什麼時候創建視圖而不是副本?
    Pandas 什麼時候創建視圖而不是副本?
    Pandas 視圖與副本生成規則Pandas 在決定 DataFrame 上的切片操作是否產生視圖或結果時採用特定規則複製。透過了解這些規則,您可以優化資料操作並避免意外行為。 從始終產生副本的操作開始:所有操作,除了那些專門設計用於修改的操作就地 DataFrame,創建副本。 只有某些操作支援 ...
    程式設計 發佈於2024-11-06
  • 使用代理伺服器解鎖地理限制網站
    使用代理伺服器解鎖地理限制網站
    利用代理服务器绕过区域封锁是一种常用且有效的方法。代理服务器作为中介,可以隐藏用户的真实IP地址,使用户的请求看起来像是来自代理服务器的地理位置,从而绕过区域封锁。 使用代理服务器绕过区域封锁的关键步骤:‌‌ 选择合适的代理服务器‌:根据目标区域的网络环境和遮挡情况,选择覆盖该区域的...
    程式設計 發佈於2024-11-06
  • 如何為三角形中的線性漸變鋸齒線建立平滑邊緣?
    如何為三角形中的線性漸變鋸齒線建立平滑邊緣?
    為線性漸變鋸齒線創建平滑邊緣為了設計具有由兩個三角形形成的尖底的響應式圖像,開發人員在三角形線上遇到了意外的鋸齒狀邊緣。為了解決這個問題,我們探索了產生更平滑漸變過渡的策略。 雖然硬停止線性漸變影像中的顏色通常會導致鋸齒狀邊緣,但調整停止點和起始點可以緩解此問題。不要突然從一種顏色變為另一種顏色,而...
    程式設計 發佈於2024-11-06
  • Java 中「static」的魔力:一為所有,一切為一!
    Java 中「static」的魔力:一為所有,一切為一!
    老实说,当我们第一次遇到 static 关键字时,我们都会想:“这是什么魔法?” ?但别担心,我会用一种简单、深入、甚至有点有趣的方式来分解它! 想象一下你正在参加一个聚会?你和你所有的朋友都戴着帽子。但每个人都必须分享一顶帽子。这基本上就是 Java 中 static 关键字的作用!您不必为每个朋...
    程式設計 發佈於2024-11-06
  • 如何在 Laravel Eloquent ORM 中對錶進行別名以增強靈活性和可讀性?
    如何在 Laravel Eloquent ORM 中對錶進行別名以增強靈活性和可讀性?
    Laravel 的Eloquent 查詢中的別名表:超越DB::table在Laravel 的Eloquent ORM 中,您可以使用乾淨的、物件導向的方法與資料庫進行互動。然而,有時您可能會遇到需要更大靈活性的查詢,例如別名表。 挑戰考慮使用 Laravel 的查詢產生器來查詢:$users = ...
    程式設計 發佈於2024-11-06
  • 如何使用 document.write 功能動態包含腳本?
    如何使用 document.write 功能動態包含腳本?
    動態包含具有document.write功能的腳本問題:如何將帶有變數src屬性的腳本標籤動態加入網頁中,特別是如果src 包含document.write 函數? 背景:通常,在 HTML 頭中添加具有特定 src 屬性的腳本標記可以無縫運作。但是,當src屬性中包含document.write程...
    程式設計 發佈於2024-11-06
  • 為什麼我在 Python 中收到「Bad magic number」導入錯誤?
    為什麼我在 Python 中收到「Bad magic number」導入錯誤?
    Bad Magic Number:了解導入錯誤使用 Python 時,遇到「Bad magic number」ImportError 可能會令人沮喪。此錯誤表示 pyc 檔案(Python 腳本的編譯版本)已損壞,這會導致與 Python 解釋器不相容。 瞭解幻數在 UNIX 中-type 系統中,...
    程式設計 發佈於2024-11-06
  • 如何測試 Go 中未匯出的函數?
    如何測試 Go 中未匯出的函數?
    從非測試 Go 檔案中呼叫測試函數在 Go 中,不應從程式碼本身呼叫測試函數。相反,單元測試應該使用 go test 指令執行。 黑白盒測試Go 支援兩種類型的單元測試:黑盒和白盒.黑盒測試測試從包外部匯出的函數,模擬外部包如何與其互動。 白盒測試從包本身內部測試未導出的函數。 Example考慮...
    程式設計 發佈於2024-11-06
  • 如何優化 Matplotlib 繪圖效能以提高速度和效率?
    如何優化 Matplotlib 繪圖效能以提高速度和效率?
    提高 Matplotlib 繪圖效能使用 Matplotlib 繪圖有時會很慢,尤其是在處理複雜或動畫圖形時。了解這種緩慢背後的原因可以幫助您優化程式碼以獲得更快的效能。 瓶頸和 BlittingMatplotlib 繪圖過程的主要瓶頸在於它對所有內容的重繪每次調用Fig.canvas.draw()...
    程式設計 發佈於2024-11-06
  • 面試工具包:陣列 - 滑動視窗。
    面試工具包:陣列 - 滑動視窗。
    一切都与模式有关! 一旦你学会了这些模式,一切都开始变得更容易了!如果你像我一样,你可能不喜欢技术面试,我不怪你——面试可能很艰难。 数组问题是面试中最常见的问题。这些问题通常涉及使用自然数组: const arr = [1, 2, 3, 4, 5]; 还有字符串问题,本质上是字符...
    程式設計 發佈於2024-11-06
  • 字串常數池:為什麼即使文字存在,「new」也會建立一個新的字串物件?
    字串常數池:為什麼即使文字存在,「new」也會建立一個新的字串物件?
    字串常數池:深入檢查Java 中的字串常數池被池化以優化記憶體使用並提高效能。這表示當遇到字串文字時,編譯器會檢查字串常數池中是否存在具有相同值的現有字串物件。如果找到,引用將定向到現有對象,避免建立新對象。 但是,當使用「new」運算子建立新的 String 物件時,會出現混亂,因為這似乎與規則相...
    程式設計 發佈於2024-11-06
  • 如何在 PHP 中使用 array_push() 處理多維數組?
    如何在 PHP 中使用 array_push() 處理多維數組?
    使用PHP 的array_push 添加元素到多維數組使用多維數組可能會令人困惑,特別是在嘗試添加新元素時。當任務是將儲存在 $newdata 中的循環中的資料附加到給定 $md_array 內的子數組「recipe_type」和「cuisine」時,就會出現此問題。 要實現此目的,您可以利用arr...
    程式設計 發佈於2024-11-06

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3