TypeScript 類型系統(二)

本文將簡述類型系統中的類型聯合,通俗的來說就是將一個變量規定為不是某一個類型,而是某些類型,我們在日常開發中很常見下面會給出例子。

值類型

在JavaScript中用const聲明的變量是不可以再次賦值的,也就是常量。在TypeScript中也可以用一個值來約束變量,作用其實和const聲明的變量差不多。

let a: "abc" = "abc";
a = "def" // 報錯 不能將類型“def”分配給“abc”

這個例子表明:a變量的類型是字符串“abc”,導致這個變量只能賦值為"abc",賦值其他字符串就會報錯。

在TypeScript中,如果遇到const聲明的變量并且沒有進行類型約束,那么就會將其識別為值類型。

const x = "hello"
x = "hi" // 報錯 無法分配到"x" 因為是常量

這樣推斷是合理的,因為const命令聲明的變量,一旦聲明就不能改變,相當于常量。值類型就意味著不能賦為其他值。

注意:用const聲明的變量,如果賦值為對象并不會推斷為值類型,因為在JavaScript中對象的屬性是可以改變的

在日常開發中,單個值類型的作用不大也不常用,往往是將多個值類型聯合起來使用。

聯合類型

聯合類型是指:多個類型組成一個新的類型,多個類型之間用符號 | 連接

聯合類型A | B表示:必須滿足類型A或者類型B。

let x: number | string
x = 2
x = "123"

此時的x既可以是number類型,也可以是string類型。

聯合類型也可以和值類型相結合,舉一個很簡單的例子:

let sex: "男"|"女"

性別只能是男或者女,這樣用值類型和聯合類型相結合進行的約束,這樣可以清楚的規定好變量的取值范圍,不至于犯錯。當然也可以將null和undefined類型聯合進去。

當我們是用聯合類型時,要注意類型縮小的問題:

function parse(s: string | number) {console.log(s.toUpperCase()) // 報錯 類型“number”上不存在屬性“toUpperCase”
}

此時我們需要在函數內部將類型縮小

function parse(s: string | number) {if (typeof s === "string") {console.log(s.toUpperCase());} else {console.log(s);}
}

?交叉類型

交叉類型也是將多個類型組合為一個新的類型,類型之間用 & 連接。

A&B 表示必須同時滿足A類型和B類型。

交叉類型主要用于對象之間的組合。

let a :{x:number}&{y: string}a = {x: 1,y: "2"
}

變量a必須同事滿足兩個類型才可以成功賦值。

類型別名 type

類型別名是定義一個類型的關鍵字,將類型定義好之后,不同的地方約束類型的時候可以復用,減少代碼的冗余。

type命令用來定義一個類型的別名。

type Person = {name: stringage: numbersex: "男" | "女"job: string
}let Tom: Person = {name: "Tom",age: 20,sex: "男",job: "外賣小哥"
}

別名可以讓類型的名字變得更有意義,也能增加代碼的可讀性,還可以使復雜類型用起來更方便,便于以后修改變量的類型。(類型別名不可以重名!!!)

type定義的類型別名是類型相關的代碼,在編譯為JavaScript之后就會全部消失。

其他常用類型

void: 通常用于函數的返回值,表示函數沒有任何返回值

never 通常用于約束函數的返回值,表示函數永遠不會結束

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

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

相關文章

無刷電機控制 - STM32F405+CubeMX+HAL庫+SimpleFOC08,速度閉環控制(有電流環)

導言 《STM32F405CubeMXHAL庫SimpleFOC07,ADC采樣相電流,頻率20KHz(TIM1觸發Injected Sampling中斷》,有了上一章節的電流采樣后,可以完善速度閉環控制了。 有了電流環的速度閉環控制,電機的扭矩會顯得大很…

【機械故障】共振峰

機械故障信號分析 提示:學習筆記 1、機械振動名詞 2、共振峰 共振峰 機械故障信號分析 1、機械振動名詞 [2、共振峰](https://editor.csdn.net/md/?not_checkout=1&activity_id=10937&spm=1057.2600.3001.10415) @[TOC](共振峰) `詳細講解共振峰、共振頻率帶、共振頻…

力扣(用隊列實現棧)

解析 LeetCode 225. 用隊列實現棧:單隊列的巧妙運用 一、題目分析(一)功能需求 實現 MyStack 類,支持棧的四種操作: push(int x):將元素壓入棧頂。pop():移除并返回棧頂元素。top():…

服務器Docker 安裝和常用命令總結

Docker 安裝和常用命令總結Docker 是一種開源平臺,用于自動化應用程序的部署、擴展和管理。通過將應用程序及其依賴打包到一個輕量級、可移植的容器中,Docker 能夠在任何地方統一運行,解決了不同環境間的兼容性問題。本篇文章將介紹 Docker 的…

2025年廣東省無線電管理普法宣傳活動

一、無線電發射設備型號核準相關制度及要求1.型號核準設備類型:一、公眾網移動通信設備二、專用通信設備三、無線接入設備四、廣播發射設備五、雷達設備六、導航設備七、衛星通信設備(含終端地球站)無線電發射設備八、公眾網移動通信模塊九、無線接入模塊十、其他設…

使用 Whisper 將南蒂羅爾方言語音轉錄為標準德語文本的研究

使用 Whisper 將南蒂羅爾方言語音轉錄為標準德語文本的研究 原文:Speech transcription from South Tyrolean Dialect to Standard German with Whisper 本研究展示了首個經過微調的Whisper模型,用于將南蒂羅爾方言語音自動翻譯為標準德語文本。為了滿足字幕和翻譯方面尚未被…

Nexus管理maven倉庫和jar包的配置和使用

登錄nexus以后點擊Settings-Repository-Repositories-Create repository 選擇maven2(hosted)創建兩個倉庫一個是Release叫做monitor-releases:一個是Snapshot叫做monitor-snapshots:在創建一個maven2(group)叫做monitor將maven-central(用于存…

瘋狂星期四文案網第50天運營日記

網站運營第50天,點擊觀站: 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 今日訪問量 今天流量減了一些,我發現我的瘋狂星期四的詞沒有排名第一了,感覺應該是抽象文案這個導致的,因為我發了…

計算機視覺學習路線:從入門到進階的完整指南

計算機視覺學習路線:從入門到進階的完整指南 計算機視覺(Computer Vision, CV)是人工智能領域最熱門和最具前景的方向之一,它賦予機器“看”和“理解”圖像與視頻的能力。無論你是學生、工程師還是對AI感興趣的愛好者&#xff0c…

移動應用抓包與調試實戰 Charles工具在iOS和Android中的應用

隨著移動互聯網的發展,幾乎所有應用都依賴API接口進行數據交互。無論是登錄注冊、支付功能,還是新聞資訊加載,背后都需要與服務器頻繁通信。如何快速定位問題、驗證數據傳輸、模擬弱網環境,成為移動端開發者日常工作中的關鍵任務。…

【Python NTLK自然語言處理庫】

安裝流程 import nltk nltk.download()運行后出現一個界面,然后按DownloadTokenize ###分詞 from nltk.tokenize import word_tokenize text "The vendor paid $20,000,000." tokens word_tokenize(text) print(tokens)輸出 [The, vendor, paid, $, 20,…

GitHub 熱榜項目 - 日榜(2025-08-25)

GitHub 熱榜項目 - 日榜(2025-08-25) 生成于:2025-08-25 統計摘要 共發現熱門項目:20 個 榜單類型:日榜 本期熱點趨勢總結 本期GitHub熱榜呈現三大技術趨勢:1)AI代理開發成主流,如moeru-ai/airi的虛擬伴…

Mac相冊重復照片終結指南:技術流清理方案

你的Mac相冊是否變成了"重復照片博物館"?同一場景的多個版本、連續拍攝的相似圖片、不同設備導入的重復文件...這些數字冗余正在悄無聲息地吞噬著寶貴的存儲空間。本文將為你提供一套完整的技術解決方案。重復照片問題的技術分析重復類型分類從技術角度&a…

日語學習-日語知識點小記-構建基礎-JLPT-N3階段(19):文法復習+單詞第7回1

日語學習-日語知識點小記-構建基礎-JLPT-N3階段(19):文法單詞第7回1 1、前言(1)情況說明(2)工程師的信仰2、知識點1ー 復習3、單詞(1)日語單詞  …

完美世界招數據倉庫工程師咯

數據倉庫工程師-偏BI方向 (崗位信息經過jobleap.cn授權,可在CSDN發布)完美世界 北京 職位描述 負責數據倉庫架構設計、建模和ETL開發,構建可擴展的數據倉庫和分析解決方案; 負責對數據倉庫的性能和效率優化&#xff1…

RabbitMQ面試精講 Day 26:RabbitMQ監控體系建設

【RabbitMQ面試精講 Day 26】RabbitMQ監控體系建設 在“RabbitMQ面試精講”系列的第26天,我們將聚焦于RabbitMQ監控體系建設這一關鍵運維主題。作為消息中間件的核心組件,RabbitMQ一旦出現消息積壓、節點宕機或資源耗盡等問題,將直接影響系統…

把word按章節分為n份 一個文檔拆分為多份格式不變

如果你有一個word文檔,里面有很多章節,你想按照章節把它分為N份,每一份存放在一個獨立的文檔中,而且拆分之后的文檔格式和圖片都保持不變。那么你可以試一下這個工具。 #word拆分 #word按章節拆分 #word分為n份 #docx拆分章節 把w…

項目歷程—緩存系統v1

實現目標1:輸入key,value可以存儲新建一個文件,并存儲一個值 (√) 實現目標2:封裝方法,循環創建1000個文件,分別存儲一個值 (√) 實現目標3:通過輸入一個key可以檢測到文件里面的內容值 (√) 兩…

最新刀客IP地址信息查詢系統源碼_含API接口_首發

目錄 一、詳細介紹 二、效果展示 1.部分代碼 2.效果圖展示 三、學習資料下載 一、詳細介紹 最新刀客IP地址信息查詢系統源碼_含API接口_首發_自適應手機端 今天看到的這個接口,所以做了頁面供大家方便使用 查詢的IP信息包含: ASN編號 所屬國家…