TypeScript 類型注解(一)

一、TypeScript 類型注解

1、什么是TpyeScript類型注解

? ? ? ? - 是否還記得TypeScript的兩個重要特性?

? ? ? ? ? ? ? ? ? - 類型系統、適用于任何規模

? ? ? ? - 可以說,TS的類型系統是TS最重要的功能;那么什么是類型注解呢?其實就是在聲明變量時,將變量的類型一同聲明出來?

? ? ? ? ? ? ? ? let 變量.類型=“值”

? ? ? ? ? ? ? ? 簡寫:let 變量 = 值

? ? ? ? ? ? ? ? 當省略.類型時,系統會自動根據當前值確定當前變量的類型

2、類型注解的優勢

? ? ? ? - 當使用類型注解之后,變量值的類型將不能發生改變,否則就會報錯,這樣就可以保證代碼的嚴謹性和規范性

????????

? ? ? ? ?- 當使用類型注解之后,在變量后面敲一個.運算符,可以發現當前數據類型下的方法和屬性都會幫助你提示出來

????????

3、vscode錯誤提示插件

如果想讓vscode的錯誤提示更明顯一些,可以下載插件幫助完成

????????

可以發現,開啟之后,錯誤更加直觀

????????

TypeScript中的類型注解有那些

1、TS中支持的類型有哪些?

? ? ? ? 可以將TS中常見的基礎類型分兩類:

? ? ? ? ? ? ? ? - JavaScript已有類型

? ? ? ? ? ? ? ? ? ? ? ? 簡單類型:number、string、boolean、null、undefined

? ? ? ? ? ? ? ? ? ? ? ? 復雜類型:數組、對象、函數(在ts中,將object類型做了更細致的劃分)、

? ? ? ? ? ? ? ? - TypeScript新增類型

? ? ? ? ? ? ? ? ? ? ? ? 聯合類型、自定義類型(類型別名)、接口、元祖、字面量類型、枚舉、void…

一、TypeScript類型約束 - 簡單類型

? ? ? ? 1、TS已有類型中的簡單類型

? ? ? ? ? ? ? ? 對于簡單類型其實很容易理解和掌握,跟number一樣,可以嘗試一下其他簡單類型

????????????????

2、解決一個問題

? ? ? ? 在復雜類型之前,來看一個現象,將main.ts復制一份出來,會發現ts文件中咱們之前的變量都會報錯

? ? ? ?

? ? ? ? 原因就是ts環境下,程序認為在同一個目錄下的文件都是同一塊作用域,所以變量出錯

? ? ? ? 解決辦法:將代碼套在花括號({}塊級作用域)中,將變量的作用域隔絕開

????????

這個錯誤,聲明了變量未使用, 使用一下就不會報錯了。

二、TypeScript類型約束 - 數組

1、TS已有類型中的負載類型 - 數組

? ? ? ? 數組類型的定義還是有點特殊的,因為數組的定義不是定義變量本身是數組類型,而是定義數組內部可以存放什么類型的數據

? ? ? ? ? ? ? ? - 數組定義方式 1:

? ? ? ? ? ? ? ? ? ? ? ? let arr.number[]=[],

? ? ? ? ? ? ? ? ? ? ? ? number[]是約束數組中存儲的數據必須是數字類型

? ? ? ? ? ? ? ? - 數組 定義方式 2:

? ? ? ? ? ? ? ? ? ? ? ? let arr.Array<string>=[] ;利用了泛型的知識點,后面會詳細講解泛型

三、TypeScript類型約束 - 聯合類型

? ? ? ? 學習完數組的定義方法之后,肯定有一個問題,就是如果數組中存在的數據類型不止一種怎么辦這就是需要用到聯合類型了:

? ? ? ?聯合類型其實就是通過 | 運算符,將多個類型隔開,已達到都能兼容的目的

? ? ? ? ? ? ? ? let arr.(number | string)[]=[]

? ? ? ? ? ? ? ? 當然,如果還有更多類型,就可以通過|去連接即可

????????聯合類型除了可以在定義數組時使用,在定義普通變量時也可以使用

????????????????let params:number|null=null

? ? ? ? ?比如咱們之前在做練習時,經常使用變量接收一個計時器,其實計時器返回的結果是一個數字,是計時器的id。但是咱們在定義變量的時候經常定義成null,所以這時候就可以通過聯合類型解決這個問題:

????????

總結:其實聯合類型并不是一個新類型,只是多個類型的結合而已!

四、TypeScript類型約束 - 類型別名

想要知道什么是類型別名,大家來看一下下面這種情況,比如我有一個數組,里邊可以存放number/string/boolean/null/undefined:

????????let arr: ( number | string | boolean | null | undefined )[] = [ ];

好的,比如現在我有多個這樣的數組,你的代碼結構就會變成:

????????let arr: ( number | string | boolean | null | undefined )[] = [ ];

????????let arr: ( number | string | boolean | null | undefined )[] = [ ];

????????let arr: ( number | string | boolean | null | undefined )[] = [ ];

雖然說這么寫也沒什么問題,但是代碼質量看起來確實很low,那么如果我能把類型當做一個變量存儲起來,是不是可以極大的簡寫代碼結構呢?

?類型別名 type ArrType = ( number | string | boolean | null | undefined )[];

????????let arr: ArrType = [ ];

????????let arr: ArrType = [ ];

????????let arr: ArrType = [ ];

類型別名就是使用關鍵詞type,把你的其他類型封裝成一個變量,然后使用類型別名去定制變量的類型!

當然,類型別名可以很靈活的去定制:

????????type ArrType = number | string | boolean | null | undefined;

????????let arr: ArrType[] = [ ];

提示:類型別名建議首字母大寫

五、TypeScript類型約束--函數

函數創建好之后需要參數以及有返回值,在TS中就需要對參數和返回值做類型限制:

????????- 函數聲明語法格式:

????????????????function 函數名(參數1: 類型, 參數2: 類型):返回值類型 { 函數體 }

???????????????? function count( param1: number, param2: number ): number { return a + b; }

????????- 函數表達式語法格式:

????????????????let 函數名 = function(參數1: 類型, 參數2: 類型):返回值類型 { 函數體 }

????????????????let count = function( param1: number, param2: number ): number { return a + b; }

????????- 箭頭函數語法格式:

????????????????let 函數名 = (參數1: 類型, 參數2: 類型):返回值類型 => { 函數體 }

????????????????let count = ( param1: number, param2: number ): number => { return a + b; }

注意:TS下的箭頭函數就算只有一個參數,也不能省略小括號!否則會有語法錯?? ?誤。

????????- 函數參數不固定的情況

????????????????對于有些函數,某些參數的情況可能不固定,有可能傳有可能不傳,如果不做處理的話,程序會報錯

????????????????

????????????????針對這種情況,可以使用 “”來定制可選參數:

????????????????

????????????????并且注意,在可選參數之后,不能再出現必選參數了:

????????????????

????????????????對于ES6中的 reset 參數,當然也需要定義類型:

????????????????

????????????????reset就是一個數組,所以規定你程序必須的數組類型即可

????????- 函數的類型別名

????????????????函數的類型別名其實跟咱們以前的類型別名是一個道理,如果你需要定義多個參數相同、類型相同、返回值類型相同的函數,你的代碼會變成:

????????????????????????????????

????????????????針對這種情況,可以將參數類型以及返回值類型進行別名封裝,簡化代碼結構:

????????????????語法: type 函數類型別名 = (參數1: 類型,參數2:類型) => 返回值類型

????????????????

????????????????注意:函數的類型別名僅支持函數表達式寫法,不支持函數聲明寫法!????????

????????- void類型

????????????????在定義函數時,并不是每一個函數都會有返回值,有些函數是沒有返回值的,那么當沒有返回值的時候,一個函數的返回值類型應該是什么呢?

????????????????

????????????????通過一個沒有返回值的函數大家可以發現,函數的返回值是 void , 所以,對于沒有返回值的函數,他的默認返回值類型是void。

????????????????當然, 你可以主動指定他的返回值類型是void。

????????????????

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

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

相關文章

弗蘭肯斯坦式的人工智能與GTM策略的崩潰

2025 年上半年已經明確了一件事&#xff1a;B2B 市場營銷團隊被工具淹沒&#xff0c;但缺乏策略。人工智能無處不在。收入領導者在進行無休止的試點。營銷團隊拼湊各種點解決方案&#xff0c;希望能實現規模擴張。然而&#xff0c;銷售線索的增長停滯不前。信譽正在受損。曾經承…

NAND閃存(NAND Flash)是什么?

NAND閃存(NAND Flash)是什么? NAND閃存(NAND Flash)詳解 NAND閃存是一種非易失性存儲介質(斷電不丟失數據),廣泛應用于SSD、U盤、手機存儲等設備中。NAND Flash 的全稱是 “Negative-AND Flash”(與非型閃存),其名稱源自其底層存儲單元的電路結構——基于**“與非門…

Android性能優化之UI渲染優化

一、UI渲染核心瓶頸深度解析 1. 渲染管線關鍵階段階段CPU工作GPU工作潛在卡頓點Measure計算View尺寸-嵌套布局多次測量Layout計算View位置-頻繁重排(Relayout)Draw構建DisplayList指令集-復雜自定義View.onDraw()Sync & Upload資源上傳到GPU內存紋理上傳大圖/未壓縮資源Ras…

基于Spring AI Alibaba的智能知識助手系統:從零到一的RAG實戰開發

&#x1f4d6; 項目概述 在人工智能快速發展的今天&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff09;技術已成為構建智能問答系統的核心技術。本文將詳細介紹一個基于Spring AI Alibaba DashScope深度集成的智能知識助手系統的完整開發過程&#xff0c;…

VirtualBox + CentOS:啟用 DHCP 獲取 IPv4 地址

標題&#xff1a; VirtualBox CentOS&#xff1a;啟用 DHCP 獲取 IPv4 地址 日期&#xff1a; 2025-07-18 一、問題現象 最小化安裝的 CentOS 7 虛擬機里敲&#xff1a; ip addr輸出只有 lo 的 127.0.0.1 以及 enp0s3 的 IPv6 鏈路本地地址&#xff0c;沒有 IPv4&#xff0…

Git

Git簡介Git 是一個分布式版本控制工具&#xff0c;通常用來對軟件開發過程中的源代碼文件進行管理。通過Git 倉庫來存儲和管理這些文件&#xff0c;Git 倉庫分為兩種:本地倉庫:開發人員自己電腦上的 Git倉庫。遠程倉庫:遠程服務器上的 Git 倉庫。commit: 提交, 將本地文件和版本…

通信算法之294:LTE系統中的整數倍頻偏估計

在LTE系統中&#xff0c;整數倍頻偏估計主要通過以下方法實現&#xff1a;一、最大似然估計法&#xff08;ML&#xff09;通過遍歷預設的整數倍頻偏范圍&#xff08;如30kHz&#xff09;&#xff0c;將接收信號與本地的PSS序列在不同頻偏點上進行相關運算&#xff0c;選擇相關峰…

數字人直播:開啟直播行業新紀元?

?原始尺寸更換圖片p9-flow-imagex-sign.byteimg.com??在科技日新月異的當下&#xff0c;直播行業正經歷著一場深刻變革&#xff0c;數字人直播的興起&#xff0c;宛如一顆璀璨新星&#xff0c;照亮了直播領域的新征程。數字人直播&#xff0c;是利用先進的人工智能技術&…

朝鮮升級供應鏈惡意軟件XORIndex,再次瞄準npm生態系統

Socket威脅研究團隊最新披露&#xff0c;朝鮮國家支持的黑客組織在"傳染性面試"攻擊活動中采用了新型惡意軟件加載器XORIndex&#xff0c;該惡意程序專門通過npm軟件包注冊表滲透軟件供應鏈。攻擊規模與持續性此次攻擊并非孤立事件&#xff0c;而是針對開發者、求職者…

Windows 下 VS2019 編譯 libevent-2.1.10 庫

1. 你需要VS2019 編譯好openssl-1.1.1 &#xff0c;這個具體編譯或者下載可以參考我的博客openssl生成的庫是這兩個文件接下來&#xff0c;打開CMake &#xff0c;主要是下面的需要設置好最后Config Generate即可&#xff1b;全部成功生成 22個然后INSTALL右鍵生成 最后看下生…

Vim多列操作指南

我們在使用 Vim 時&#xff0c;經常需要同時編輯多個文件&#xff0c;或者同一個文件的不同部分。Vim 提供了分割窗口&#xff08;split&#xff09;和垂直分割窗口&#xff08;vsplit&#xff09;的功能&#xff0c;允許我們在同一個 Vim 會話中查看多個緩沖區&#xff08;buf…

Python網絡爬蟲實現selenium對百度識圖二次開發以及批量保存Excel

一.百度識圖自動上傳圖片from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By edge_options Options() edge_options.binary_location r"C:\Program Files (x86)\Microsoft\Edge\Applica…

Vue中的refs字段使用記錄

這段代碼是 Vue.js 中結合 Element UI 等 UI 庫的典型表單驗證寫法&#xff0c;具體含義如下&#xff1a;代碼拆解 this.$refs.fromData.validate((valid) > {// 驗證后的回調邏輯 })this.$refs.fromData $refs 是 Vue 提供的特殊屬性&#xff0c;用于訪問模板中通過 ref&qu…

多方案對比分析:后端數據加密策略及實踐

多方案對比分析&#xff1a;后端數據加密策略及實踐 隨著互聯網業務對用戶隱私和數據安全的要求不斷提升&#xff0c;后端系統中對敏感數據的加密保護已成為必備需求。從對稱加密、非對稱加密到數據庫透明加密、應用層字段加密&#xff0c;各種方案各有特點。本文將以方案對比分…

《Java語言程序設計》1.4 復習題

1.4.1 什么是操作系統?列出一些流行的操作系統?操作系統(Operating System)是運行在計算機上的最重要的程序。操作系統管理和控制計算機的活動。通用計算機的流行操作系統有Microsoft Windows、Mac OS以及Linux。如果沒有在計算機上安裝和運行操作系統&#xff0c;像Web瀏覽器…

OpenCV圖像自動縮放(Autoscaling)函數autoscaling()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該函數用于對輸入圖像進行自動縮放&#xff08;Autoscaling&#xff09;&#xff0c;即根據輸入圖像的像素值范圍將其線性映射到一個新的范圍內&am…

多線程的認識

競爭與協作在單核 CPU 系統里&#xff0c;為了實現多個程序同時運行的假象&#xff0c;操作系統通常以時間片調度的方式&#xff0c;讓每個進程執行每次執行一個時間片&#xff0c;時間片用完了&#xff0c;就切換下一個進程運行&#xff0c;由于這個時間片的時間很短&#xff…

SpringCloud相關總結

SpringCloud相關總結 1. 權威文檔推薦&#xff1a; 官方文檔&#xff1a;https://spring.io/cloud 玩的時候&#xff0c;注意SpringBoot與SpringCloud的版本兼容問題,推薦參考&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%…

NW983NW988美光固態閃存NW991NW992

美光NW系列固態閃存深度解析&#xff1a;技術、對比與應用指南一、技術根基與架構創新美光NW系列固態閃存的技術突破源于其先進的G9 NAND架構&#xff0c;該架構采用5納米制程工藝和多層3D堆疊技術&#xff0c;在單位面積內實現了高達256層的存儲單元堆疊&#xff0c;存儲密度較…

pytest + requests 接口自動化測試框架

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】 使用 pytest + req