三(三)ts非基礎類型(接口)

說明

在面向對象語言中,接口是一個很重要的概念,它是對行為的抽象,而具體如何行動需要由類去實現。

TypeScript 中的接口是一個非常靈活的概念,除了可用于對類的一部分行為進行抽象以外,也常用于對「對象的形狀(Shape)」進行描述。(也就是對象里面的屬性或方法進行描述)

基礎用法

使用interface關鍵字聲明接口

interface User {name: string,age: number,getName: () => string
}
let person: User = { name: 'fufu', age: 20, getName: function(): string { return this.name}}

定義只讀屬性

使用readonly關鍵字限制接口中的參數是只讀 ,使用該接口的對象只有在第一次賦值的時候可以對可讀屬性進行賦值操作。

interface User {readonly name: string,readonly age: number
}
let person: User = {name: 'fufu', age: 20}
person.name = 'dandan'  // Cannot assign to 'name' because it is a read-only property.

有時候我們會想到如果我們定義一個只讀的接口,為什么不直接使用const聲明一個對象呢?

readonly 是’TS’ 在接口提出,只針對接口中的參數賦值后就禁止更改,而const
es6 提出的針對變量,不讓變量進行更改。其次const聲明一個對象只是內存地址不允許修改,但是里面的屬性是可以修改的。

最簡單判斷該用readonly還是const的方法是看要把它做為變量使用還是做為一個屬性。 做為變量使用的話用const,若做為屬性則使用readonly。

定義不確定屬性

很多時候我們并不確定對象里面有沒有該屬性,這個時候可以使用?關鍵字進行說明

interface User {name?: string,age: number
}
let person: User = {age: 20}

索引簽名

那如果一個對象屬性很多,且都是不確定的情況下,我們應該如何聲明呢?如果使用?則需要將所有可能出現的屬性定義出來,這肯定是不合理的。我們可以使用索引簽名的方式進行定義。

interface Person {name: string;age: number; [propName: string]: any;
}let tom: Person = {name: 'Tom',age: 25,height: 170
};

定義數組

接口除了用于定義對象結構外,還可以用于數組的定義,類似于元組。

interface arr  {0: number,1: string
}let arr1: arr = [1, '1']
arr1.push(1) // Property 'push' does not exist on type 'arr'.

當然他肯定與元組也是有區別的。元組雖然是定義已知類型和和長度的數組,但是使用push依舊可以改變數組長度。使用interface即使使用push也依舊無法修改數組長度。

繼承

接口是可以繼承與被繼承的,并且繼承可以同時繼承多個接口。

interface A {name: string
}interface B {age: number
}interface User extends A , B {gender: boolean
}let user:User = {age: 20,name: 'fufu',gender: true
}

注意如果在繼承過程中發現相同屬性但卻類型不同,會判斷當前類型是否兼容之前的類型

interface A {name: string
}interface B {gender: boolean,
}interface User extends A , B {gender: any, //如果設置為string則報錯age: number
}let user:User = {age: 20,name: 'fufu',gender: '1'
}

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

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

相關文章

屏幕分辨率修改工具SwitchResX mac功能特點

SwitchResX mac是可用于修改和管理顯示器的分辨率和刷新率。 SwitchResX mac功能和特點 支持多種分辨率和刷新率:SwitchResX可以添加和管理多種分辨率和刷新率,包括自定義分辨率和刷新率。 自動切換分辨率:SwitchResX可以根據應用程序和窗口…

絕地求生:追尋槍王之路,為什么PUBG老玩家要進行訓練?

作為一款全球熱門的射擊游戲,《絕地求生:大逃殺》(PUBG)吸引了大批熱衷于挑戰極限的玩家。在這個槍戰沙盒中,角逐者們需要不斷提升自己的戰術、槍法和反應速度,才能在百人對戰中脫穎而出。那么為什么PUBG老…

1274:【例9.18】合并石子

【算法分析】 【算法分析】 首先我們要先讀懂題意,可能有部分同學在讀題的時候就有點難以理解。 我們首先來分析一個比較簡單的問題,現在一共有三堆石頭,每堆石子的數量分別是3,4,11。求合并成一堆石頭的最小得分。…

Hanlp自然語言處理如何再Spring Boot中使用

一、HanLP HanLP (Hankcs NLP) 是一個自然語言處理工具包,具有功能強大、性能高效、易于使用的特點。HanLP 主要支持中文文本處理,包括分詞、詞性標注、命名實體識別、依存句法分析、關鍵詞提取、文本分類、情感分析等多種功能。 HanLP 可以在 Java、Py…

【LeetCode每日一題】2270.分割數組的方案數

https://leetcode.cn/problems/number-of-ways-to-split-array/description/ 題目: 給定一個數組,從 下標為 index 的地方切開,左邊的數大于右邊,保證右邊至少有一個數。 思路一: 遍歷數組,用prefixArr …

運用企業微信構建內部外部溝通橋梁的策略

隨著互聯網技術的普及和移動設備的廣泛使用,企業微信作為企業內部協作和溝通的重要工具,發揮著越來越重要的作用。其中,企業微信的社群功能為信息的傳播和交流提供了新的途徑。通過建立活躍的企業微信社群,不僅可以加強員工之間的…

部署Nextcloud詳細步驟及優化方法

一、安裝PHP8.0以上 我這里使用PHP8.0.30 [rootlocalhost ~]# php -v PHP 8.0.30 (cli) (built: Aug 3 2023 17:13:08) ( NTS gcc x86_64 ) Copyright (c) The PHP Group Zend Engine v4.0.30, Copyright (c) Zend Technologies [rootlocalhost ~]# 安裝方法參考 二、安裝MY…

[算法基礎 ~排序] Golang 實現

文章目錄 排序什么是排序排序的分類1. 冒泡1.1 冒泡排序1.2. 快速排序 2. 選擇2.1 簡單選擇排序2.2 堆排序 3. 插入3.1 直接插入3.2 折半插入3.3 希爾排序 4. 歸并排序代碼實現 5. 基數排序 排序圖片就不貼了吧 排序 什么是排序 以下部分動圖來自CSDN ::: tip 穩定性的概念 …

linux創建新用戶

在Linux中,可以使用useradd命令來創建新用戶。以下是創建新用戶的基本步驟: 打開終端或命令行界面。輸入以下命令并按下回車鍵創建新用戶: sudo useradd -m -s /bin/bash username 其中,-m選項表示同時創建用戶主目錄&#xff…

【Kubernetes】存儲類StorageClass

存儲類StorageClass 一、StorageClass介紹二、安裝nfs provisioner,用于配合存儲類動態生成pv2.1、創建運行nfs-provisioner需要的sa賬號2.2、對sa授權2.3、安裝nfs-provisioner程序 三、創建storageclass,動態供給pv四、創建pvc,通過storage…

mysql:用SHOW COLUMNS FROM顯示一個表的列信息

可以使用命令SHOW COLUMNS FROM table_name;顯示一個表的列信息,例如:

Java se的語言特征之多態

目錄 滿足多態的條件動態綁定第一步動態綁定第二步動態綁定第三步參數列表,返回類型,訪問修飾限定符區別有動態綁定,那是不是有靜態綁定向下轉型抽象類接口實現多個接口(先繼承再接口,接口用",") 滿足多態的條件 定義:去完成某個狀態的時候,當不同的對象去完成的時候…

MTK Android13 user版本進入engineermode的Bluetooth測試項時閃退

平臺:MT6771 android13 問題描述:進入到工模,點擊進入Bluetooth測試項直接閃退 Log如下: 07-31 10:15:51.480 3605 3605 D EM/EmUtils: getEmAidlService ... 07-31 10:15:51.481 398 398 I servicemanager: Could not fin…

42、JSON 函數

目錄 1. json 的兩個常用方法 json.dumps()方法 :把python對象編碼為json字符串 json.loads()方法:把json字符串編碼成python對象 1. json 的兩個常用方法 json 的存在有兩種形式。 一種是:對象的形式存在,我們叫它 json 對象。…

36V H 橋有刷直流驅動芯片GC8870 GC8871 GC8872的數據選型分析

36V H 橋驅動芯片GC8870 GC8871 GC8872都可替代TI的DRV8870/8871/8872,寬電壓,內置電荷泵,短地短電源保護,限流等功能,可應用于水泵,掃地機器人,開關等產品中

數據庫系統 --- 關系模型

一、關系模型的數據結構以及形式化定義 1.關系 域:一組具有相同數據結構的值的集合。 笛卡爾積:域上的一種集合運算。多個集合做笛卡爾積的結果是每個集合取一個元素組合得到的一個新的集合。 域的基數:一個域上允許的不同取值的個數。 關系&…

mac 安裝anaconda和lightgbm

mac安裝anaconda不要去清華大學的anaconda的安裝包列表去下載安裝包, 去[官網](Free Download | Anaconda)下載, 清華的版本太老了, 老到臉conda 安裝lightgbm都不只支持 安裝好anaconda 后, 能用conda install xxx 的盡量不用pip install 其他的不知道, 用pip install ligh…

護眼臺燈為什么護眼?適合備考使用的臺燈推薦

臺燈是大家生活中必不可少的一盞燈具,尤其是當夜幕降臨時,許多仍然需要工作、或者學習的人,都要使用臺燈來提供充足的照明環境。如今隨著生活的高度發展,大家對臺燈的要求也愈發精進了一步,不僅需要能夠提供照明的&…

報表控件FastReport .NET v2024功能演示—更改圖圖片形狀

報表生成器FastReport .NET 是適用于.NET Core 3,ASP.NET,MVC和Windows窗體的全功能報告庫。使用FastReport .NET,您可以創建獨立于應用程序的.NET報告。 FastReport .net下載(qun:585577353)https://www.e…

webpack的使用

一、5 大核心概念 entry(入口) 指示 Webpack 從哪個文件開始打包 output(輸出) 指示 Webpack 打包完的文件輸出到哪里去,如何命名等 loader(加載器) webpack 本身只能處理 js、json 等資源…