TypeScript 之 Type

来源:https://www.cnblogs.com/lxrNote/archive/2022/12/06/16955779.html
-Advertisement-
Play Games

Type 描述:全稱叫做 '類型別名',為類型字面量提供名稱。比 Interface 支持更豐富的類型系統特性。 Type 與 Interface 區別 Interface 只能描述對象的形狀,Type 不止 Interface 能多次聲明進行擴展,Type 不行 在性能方面,Type 介面檢查能夠 ...


Type

描述:全稱叫做 '類型別名',為類型字面量提供名稱。比 Interface 支持更豐富的類型系統特性。

Type 與 Interface 區別

  • Interface 只能描述對象的形狀,Type 不止
  • Interface 能多次聲明進行擴展,Type 不行
  • 在性能方面,Type 介面檢查能夠更快

特性

和變數類似,可以在不同的作用域中創建具有相同的名稱。

TypeScript 內置了許多全局類型,將幫助你在類型系統完成常用的任務。

對象字面量語法( Object Literal Syntax )

type JsonRsponse = {
  version: number;
  outOfStock?: boolean; // 可選屬性
  readonly body: string; // 只讀屬性
  /** In bytes */
  payloadSize: number;  // 編輯器註釋提示
  update: (retryTimes: number) => void; // 箭頭函數方法
  update2(retryTimes: number): void; // 方法
  (): JsonRsponse; // 函數
  [key: string]: number; // 接受字元串索引,值為number
  new (s: string): JSONResponse; // 構造函數 
}

這些對象字面量的語法和 Interface 的沒有區別,詳情可閱讀我另一篇 Interface 隨筆。https://www.cnblogs.com/lxrNote/p/16953606.html

原始類型( Primitive Type )

type SanitizedIput = string
type MissingNo = 404

 

元組類型(Tuple Type)

元組是知道明確下標的特殊數組
type Data = [
  location: Location,
  timestamp: string
]

聯合類型(Union Type)

聯合類型是描述眾多類型之一
type Size = "small" | "medium" | "large"

交叉類型(Intersection Types)

一種擴展/合併的方法
type local = { x: number } & { y: number }
// local {x:number;y:number}

索引類型(Type Indexing)

如果其它類型別名是引用類型,可以通過索引獲取其值類型

type Res = { data: { x: string } }
type Content = Res["data"]
// Conent {x:string}

類型來自值(Type from Value)

重用通過 typeof 運算符取出值在JavaScript 運行時的類型
const data = { x: 123 }
type Content2 = typeof data
// Content2 = { x: number }

類型來自方法返回值(Type from Func Return)

重用方法的返回值作為類型,ReturnType 是內置全局類型
const createFixtures = ()=>{ return 123}
type Fixtures = ReturnType<typeof createFixtures>
// Fixtures = numer

類型來自模塊(Type from Module)

const data: import("./data").data

 沒看懂,知道的朋友指導下。。。。。。

映射類型(Mapped Types)

type Artist = {name: string,bio: string}
type Subscriber<Type> = {
  // 迴圈遍歷泛型參數 Type 的每一個欄位
  [Property in keyof Type]:
  (nv: Type[Property]) => void
  //設置類型為一個函數,原始類型為參數
}
type ArtisSub = Subscriber<Artist>
// { name: (nv: string)=>void, bio: (nv:string)=>void }

條件類型(Conditional Types)

在類型系統中充當 if 語句,通過泛型創建,通常用於減少聯合類型中的選項數量。
type HasFourLegs<Animal> = Animal extends { legs: 4 } ? Animal : never
type Bird = { cry: '唧唧喳喳', legs: 2 }
type Dog = { cry: '汪汪汪', legs: 4 }
type Ant = { cry: '...', legs: 6 }
type Wolf = { cry: '嗷嗚~', legs: 4 }
type Animal = Bird | Dog | Ant | Wolf
type FourLegs = HasFourLegs<Animal>
// FourLegs = Dog | Wolf

模板聯合類型(Template Union Types)

字元串模板可以用來組合和操縱類型系統中的文本
type SupportedLangs = "en" | "pt" | "zh";
type FooterLocaleIDs = "header" | "footer";

type AllLocaleIDs = `${SupportedLangs}_${FooterLocaleIDs}_id`;
// "en_header_id" | "en_footer_id" | "pt_header_id" | "pt_footer_id" | "zh_header_id" | "zh_footer_id"

 

感謝觀看,歡迎互相討論與指導,以下是參考資料鏈接

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 緩存管理器CacheManager 一、背景 ​ 代碼併發量因建行活動頁上升,大量請求打到Mongo導致資料庫cpu100%從而服務不可用,目前解決方案,使用編程式緩存,即對緩存的操作與業務代碼耦合。目前基本上可以解決併發問題。此次提出CacheManager主要是優化代碼。使用聲明式,即註解的方式 ...
  • 摘要:糟糕,資料庫異常不可用怎麼辦?挺著急的,線上等。 本文分享自華為雲社區《糟糕,資料庫異常不可用怎麼辦?》,作者:GaussDB 資料庫。 隨著數字化轉型的加速,數據量爆髮式增長,用戶對資料庫運維能力要求更高,實現對資料庫的高效智能管理,尤其是業務異常時,資料庫運維平臺能自動定位故障並修複,或者 ...
  • 作者:李浩 責編:宇亭 當我們選擇一款 HTAP 資料庫時,總是先被其相關文檔里所描述的優異性能所吸引。卓越的性能是我們選擇一款產品的出發點,因為我們希望該款產品能夠解決我們業務中的痛點。而大家使用 HTAP 產品的出發點就是希望該款資料庫能夠解決我們在事務處理過程中的實時分析痛點。不過,性能優勢只 ...
  • China Taiwan 中國臺灣 2022 年 11 月 1 日,BSMI和經濟部發佈了針對 18 種音像產品的修訂法定檢驗要求。 自發佈之日起,CNS 15598-1:2020 Audio/video, information and communication technology equip ...
  • 本次我把CSS中的重難點整理出來,總共54個核心知識點,供大家複習,希望能幫到大家。這些重難點是進階高薪必需要掌握的知識點,同時也是面試必問的內容。 ...
  • 以前真機調試手機頁面,都是使用數據線連接手機和電腦,近日身邊沒有USB數據線,折騰了下如何不依賴數據線只用無線調試手機頁面,教程如下。 本教程適用於安卓11以及以上版本。否則應該使用USB數據線連接。 一、安裝adb工具 下載地址:https://developer.android.com/stud ...
  • 前面的文章分享了組件庫的開發、example、組件庫文檔,本文分享組件庫 cli 開發。 1 為什麼要開發組件庫 cli 回顧一個新組件的完整開發步驟: 1 在 packages 目錄下創建組件目錄 xxx: 1.1 使用 pnpm 初始化 package.json,修改 name 屬性; 1.2 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 因公司業務需要,需要開發水印相機功能,而項目代碼用的uniapp框架,App端只能簡單調用系統的相機,無法自定義界面,在此基礎上,只能開發自定義插件來完成功能(自定義原生插件,即是用原生代碼來編寫組件實現功能,然後供uniapp項目調用) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...