TypeScript 接口(interface)

一、接口基礎概念

????????接口(interface)是 TypeScript 的核心類型系統工具,用于定義對象的結構規范。它不關心具體實現細節,只強制要求符合接口定義的對象必須包含指定屬性和方法。例如:

interface Person {name: string;age: number;greet(): void;
}

二、核心用法與 API

1.對象類型約束

最基礎用法是聲明對象形狀:

interface User {id: number;username: string;
}
const admin: User = { id: 1, username: "admin" }; // ? 符合接口

2.可選屬性

通過 ? 聲明非必需屬性:

interface Config {url: string;timeout?: number; // 可選
}

3.只讀屬性

readonly 防止修改:

interface Point {readonly x: number;readonly y: number;
}

4.函數類型

定義函數簽名:

interface SearchFunc {(source: string, keyword: string): boolean;
}
const mySearch: SearchFunc = (src, kw) => src.includes(kw);

5.索引類型

支持動態鍵值對(數字/字符串索引):

// 數字索引
interface NumMap {[index: number]: string;
}
const arr: NumMap = ["TS", "JS"]; // arr[0]="TS"// 字符串索引
interface StrMap {[key: string]: number;
}
const dict: StrMap = { "A": 65, "B": 66 }; // dict["A"]=65

6.類實現接口

強制類滿足特定契約(面向對象):

interface ClockInterface {currentTime: Date;setTime(d: Date): void;
}class Clock implements ClockInterface {currentTime: Date = new Date();setTime(d: Date) { this.currentTime = d; }
}

7.接口繼承

支持單繼承或多繼承:

interface Shape { color: string; }
interface Circle extends Shape { radius: number; }const c: Circle = { color: "red", radius: 10 }; // ?

8.接口合并

同名接口自動合并(擴展第三方庫常用):

interface Box { width: number; }
interface Box { height: number; }
// 合并后: { width: number; height: number; }

三、接口 vs 類型別名(type)

特性interfacetype
擴展方式繼承(extends交叉類型(&
合并同名聲明? 自動合并? 報錯
函數/元組定義? 支持? 支持
聲明合并??
實現類??implements? 僅對象類型

最佳實踐:優先使用 interface 定義對象結構,用 type 處理聯合類型或復雜類型運算。

四、高級技巧

1.混合類型

組合函數和對象屬性:

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

2.索引簽名約束

限制索引值類型必須匹配特定屬性:

interface Foo {[key: string]: number;bar: number; // ?// baz: string; ? 違反索引簽名
}

五、常見錯誤解決方案

  1. 屬性缺失錯誤 → 檢查是否遺漏必需屬性或誤用可選屬性

  2. 類型不匹配錯誤 → 確認屬性類型是否精確符合接口定義

  3. 索引簽名沖突 → 確保所有顯式屬性符合索引簽名類型

接口的核心價值在于 定義契約 而非實現,這是構建可維護大型項目的關鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/94188.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/94188.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/94188.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

selenium3.141.0執行JS無法傳遞element解決方法

問題:在Chrome 131版本以下執行下面代碼沒有問題,但是在131版本以上出現element無法傳遞問題,執行下面代碼會出現 "Message: javascript error: Cannot read properties of undefined (reading click)"# xpath匹配元素,…

汽車主機廠為何開始押注平臺化視覺?

近年來,隨著智能制造、出口質量標準、新能源整車結構復雜度等多重因素疊加,越來越多主機廠開始從“點狀部署”轉向“系統化導入”,平臺化的AI視覺檢測體系正逐步成為整車廠的標準化選項。在過去,汽車制造四大車間——焊裝、涂裝、…

STM32 - Embedded IDE - GCC - 重定向printf到串口

導言如上所示,在不同的編譯器下,重定向printf到串口時,使用的函數不一樣。 ARMCC(Keil-MDK)使用fputc()GCC使用_write() 總之,GCC/newlib的printf()走_write(),不是fputc()。

51單片機-中斷系統

本質概述思維導圖:51單片機中斷系統中斷系統概述中斷系統是為使CPU具有對外界緊急事件的實時處理能力而設置的。當中央處理機CPU正在處理某件事的時候外界發生了緊急事件請求,要求CPU暫停當前的工作,轉而去處理這個緊急事件,處理完…

ubuntu - 終端工具 KConsole安裝

地址: https://konsole.kde.org/download.html 直接使用自帶安裝管理器安裝即可

QT-左右側邊欄動畫

QT-左右側邊欄動畫演示效果一、核心程序二、鏈接演示效果 一、核心程序 #ifndef SLIDEPANEL_H #define SLIDEPANEL_H#include <QWidget> #include <QPropertyAnimation> #include <QPushButton> #include <QVBoxLayout>class SlidePanel : public QWi…

WebRTC 結合云手機:釋放實時通信與虛擬手機的強大協同效能

開發一個基于 WebRTC 技術的云手機群控系統&#xff0c;實現通過瀏覽器遠程控制多臺云手機&#xff0c;并提供文件管理、代理管理、備份管理等功能。這里只詳細分享 WebRTC 技術。 https://github.com/LingyuCoder?tabrepositories&qsky&type&language&sort …

Kafka中zk的作用是什么

Zookeeper是分布式協調&#xff0c;注意它不是數據庫 kafka中使用了zookeeper的分布式鎖和分布式配置及統一命名的分布式協調解決方案 在kafka的broker集群中的controller的選擇&#xff0c;是通過zk的臨時節點爭搶獲得的 brokerID等如果自增的話也是通過zk的節點version實現的…

【lucene】lucene常用查詢一覽

Lucene 里除了常見的 **TermQuery / BooleanQuery / PhraseQuery / FuzzyQuery / SpanNearQuery** 之外&#xff0c;還有不少“特殊家族”。下面按“族”歸納&#xff0c;一眼就能知道它們各自解決什么問題、跟普通倒排檢索的差別在哪。────────────────── …

base64認識實際使用

Base64是網絡上最常見的用于傳輸8Bit字節碼的編碼方式之一&#xff0c;Base64就是一種基于64個可打印字符來表示二進制數據的方法。 Base64&#xff0c;就是包括小寫字母a-z、大寫字母A-Z、數字0-9、符號"“、”/"一共64個字符的字符集&#xff0c;&#xff08;任何…

LX8201微孔霧化驅動芯片應用筆記一DC5V供電

前言LX8201是深圳市樂?信科技服務有限公司最新?研的?款微孔霧化?專?驅動芯?&#xff0c;結合標準外圍電路&#xff0c;能有效驅動控制市?上各種微孔霧化?&#xff0c;基于獨特的電路設計和軟件算法&#xff0c;其在功耗以及成本上均具有明顯的優勢。本應用筆記將幫助用…

MySQL索引優化之索引條件字段類型不同

在sql的聯表查詢中&#xff0c;on后面相等的兩個字段如果字段類型不一致&#xff0c;盡管它們都加了索引&#xff0c;最終查詢的時候也不會走索引&#xff0c;這是因為會觸發隱式類型轉換導致索引失效。 例如 Select * from Orders o left join User u on o.user_id u.id; 假如…

【Linux】信號(二):Linux原生線程庫相關接口

【Linux】信號的控制使用一.線程的創建pthread_create()接口二.線程等待1.為什么要線程等待&#xff1f;2.pthread_join()三.線程中止1.return2.pthread_exit五.線程應用C自帶多線程在上次的博客中主要講解了什么是線程 這次的博客主要是帶大家把線程的相關接口簡單的使用一下 …

小程序被爬蟲攻擊,使用waf能防護嗎?

在移動互聯網時代&#xff0c;小程序以輕量化、高便捷性成為流量入口新寵&#xff0c;但也因此成為爬蟲攻擊的重災區。從電商平臺的價格數據爬取到內容平臺的版權盜用&#xff0c;爬蟲攻擊不僅消耗服務器資源&#xff0c;更可能導致商業機密泄露與用戶權益受損。面對這類威脅&a…

通過自動化本地計算磁盤與塊存儲卷加密保護數據安全

作為打造開發者首選云平臺使命的一部分&#xff0c;我們持續推出免費的智能化功能與產品來加強云資源安全。最新推出的本地磁盤加密功能是我們正在所有核心計算區域逐步部署的最新計算特性。當您在首選區域啟用本地磁盤加密功能后&#xff0c;新部署的計算實例將默認自動啟用數…

中文房間悖論:人工智能理解力的哲學拷問

本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01;1 思想實驗闡述中文房間&#xff08;Chinese Room&#xff09;思想實驗…

mac如何運行windows程序?性能黨vs便捷黨選擇指南

macOS的流暢穩定雖讓人青睞&#xff0c;但系統的不兼容性是個大問題。有的用戶想要使用某個專業程序&#xff0c;發現只有Windows版本&#xff0c;然而沒法直接在mac上運行&#xff0c;非常懊惱&#xff01;mac如何運行windows程序&#xff1f;本文將提供多個可行的方法&#x…

設置電機數據(閉環驅動器C5-E) ——易格斯igus

4.3 設置電機數據 在調試之前&#xff0c;電機控制器需要電機數據表中的一些值。 ■ 極對數&#xff1a;對象 2030h&#xff1a;00h&#xff08;極對數&#xff09; 電機極對數應在此處輸入。對于步進電機&#xff0c;極對數使用步距角計算&#xff0c;例如&#xff0c;1.8 …

藥品追溯碼(溯源碼)采集系統(二):門診發藥后端

門診發退藥追溯碼采集系統解析&#xff1a;一、門診發退藥追溯碼數據表1.1、Wm_ware_dispense_bill表&#xff1a;該表用于存儲處方信息1.2 Wm_ware_dispense_tracecode:追溯碼采集表二、發退藥后端代碼后端代碼基于Springboot架構和mybatis-plus&#xff0c;先看主要接口信息&…

Unity編輯器相關

前言繼承EditorWindow。 GUILayout類與EditorGUILayout類的應用區別&#xff1a;//TODO創建窗口的方法1&#xff09;GetWindow<T>() 已開則聚焦、未開則創建。無需再手動調用 Show()。GetWindow<T>() 提供多個重載。2&#xff09;CreateInstance<T>()始終創建…