【TS】TypeScript 原始數據類型深度解析


鑫寶Code

🌈個人主頁: 鑫寶Code
🔥熱門專欄: 閑話雜談| 炫酷HTML | JavaScript基礎
?💫個人格言: "如無必要,勿增實體"


文章目錄

  • TypeScript 原始數據類型深度解析
    • 一、引言
    • 二、基礎原始數據類型
      • 2.1 `boolean`
      • 2.2 `number`
      • 2.3 `string`
      • 2.4 `null`與`undefined`
      • 2.5 `void`
    • 三、特殊原始數據類型
      • 3.1 `never`
      • 3.2 `any`
    • 四、類型推論
    • 五、最佳實踐
      • 5.1 顯式類型注解
      • 5.2 避免濫用`any`和`unknown`
      • 5.3 使用`--strict`模式
    • 六、總結

TypeScript 原始數據類型深度解析

在這里插入圖片描述
在深入學習TypeScript的高級特性和面向對象編程之前,掌握其基礎——原始數據類型至關重要。原始數據類型是構建所有復雜數據結構的基石,它們直接關系到代碼的性能、安全性及可讀性。本文將系統性地探討TypeScript中的原始數據類型,包括它們的定義、使用場景、特點以及最佳實踐,為你的TypeScript之旅奠定堅實的基礎。

一、引言

TypeScript作為JavaScript的超集,不僅繼承了JavaScript的全部原始數據類型,還在此基礎上新增了額外的類型以增強代碼的健壯性和可維護性。理解這些類型及其用途,是寫出高質量TypeScript代碼的第一步。

二、基礎原始數據類型

2.1 boolean

布爾類型是最簡單的數據類型,只有兩個可能的值:truefalse。它通常用于條件判斷和邏輯運算。

let isDone: boolean = false;

2.2 number

number類型用于表示整數和浮點數,JavaScript中的Number類型是雙精度64位浮點數。TypeScript并沒有區分整數和浮點數,但可以通過類型斷言或第三方庫來實現更嚴格的數值類型控制。

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;

2.3 string

字符串類型用于存儲文本數據,可以用單引號、雙引號或模板字符串表示。

let name: string = "Alice";
let greeting: string = `Hello, ${name}!`;

2.4 nullundefined

在TypeScript中,nullundefined是所有類型的子類型,意味著它們可以賦值給任何類型。然而,這往往導致類型不安全,因此推薦使用嚴格Null檢查(--strictNullChecks),以避免意外的nullundefined

let u: undefined = undefined;
let n: null = null;

2.5 void

void類型表示沒有任何返回值的函數。通常用于定義不返回值的函數,或者表示沒有具體值的類型。

function printMessage(message: string): void {console.log(message);
}

三、特殊原始數據類型

3.1 never

never類型表示那些永不會達到終點的代碼,例如,一個拋出異常或無限循環的函數。它沒有值,且不能被其他類型兼容。

function throwError(message: string): never {throw new Error(message);
}

3.2 any

any類型是TypeScript中的“逃脫艙”,它可以代表任何類型。雖然在某些情況下有用,但過度使用會削弱TypeScript的類型安全特性,應盡量避免。

let notSure: any = 4;
notSure = "maybe a string instead";

四、類型推論

在這里插入圖片描述

TypeScript具有類型推論機制,能夠在沒有明確類型注解的情況下推斷變量的類型。這簡化了代碼,但開發者仍應適時使用類型注解以提高代碼的可讀性和維護性。

let inferredString = "TypeScript is intelligent"; // 類型推論為 'string'

五、最佳實踐

5.1 顯式類型注解

在這里插入圖片描述

盡管TypeScript有強大的類型推論能力,但在關鍵位置使用顯式類型注解可以提高代碼的清晰度,尤其是在函數參數和返回值類型上。

5.2 避免濫用anyunknown

盡量減少使用any,除非是在處理遺留代碼或第三方庫時確實需要。對于不確定類型的值,推薦使用unknown,它比any更安全,要求顯式的類型檢查和轉換。

5.3 使用--strict模式

開啟--strict編譯選項組,包括--strictNullChecks,可以大幅提升代碼質量,強制執行更嚴格的類型檢查規則。

六、總結

TypeScript的原始數據類型構成了其類型系統的基石。通過理解并熟練運用這些類型,開發者不僅能編寫出更健壯、更易于維護的代碼,還能充分利用現代IDE的智能提示和類型檢查功能,顯著提升開發效率。隨著TypeScript社區的不斷成熟和新特性的加入,掌握這些基礎變得更加重要,它們是通往TypeScript高級特性和復雜應用開發的必經之路。希望本文能為你深入探索TypeScript的世界鋪平道路。

End

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

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

相關文章

蒼穹外賣--sky-take-out(四)10-12

蒼穹外賣--sky-take-out(一) 蒼穹外賣--sky-take-out(一)-CSDN博客?編輯https://blog.csdn.net/kussm_/article/details/138614737?spm1001.2014.3001.5501https://blog.csdn.net/kussm_/article/details/138614737?spm1001.2…

Unity動畫系統(2)

6.1 動畫系統基礎2-3_嗶哩嗶哩_bilibili p316 模型添加Animator組件 動畫控制器 AnimatorController AnimatorController 可以通過代碼控制動畫速度 建立動畫間的聯系 bool值的設定 trigger p318 trigger點擊的時候觸發,如喊叫,開槍及換子彈等&#x…

在js中如何Json字符串格式不對,如何處理

如果 JSON 字符串格式不正確,解析它時會拋出異常,但我們可以嘗試盡可能提取有效的信息。以下是一個方法,可以使用正則表達式和字符串操作來提取部分有效的 JSON 內容,即使整個字符串無法被 JSON.parse 完全解析。 示例代碼如下&a…

錯誤 [WinError 10013] 以一種訪問權限不允許的方式做了一個訪問套接字的嘗試 python ping

報錯提示:錯誤 [WinError 10013] 以一種訪問權限不允許的方式做了一個訪問套接字的嘗試 用python做了一個批量ping腳本,在windows專業版上沒問題,但是到了windows服務器就出現這個報錯 解決方法:右鍵 管理員身份運行 這個腳本 …

sql拉鏈表

1、定義:維護歷史狀態以及最新數據的一種表 2、使用場景 1、有一些表的數據量很大,比如一張用戶表,大約1億條記錄,50個字段,這種表 2.表中的部分字段會被update更新操作,如用戶聯系方式,產品的…

compute和computeIfAbsent的區別和用法

compute和computeIfAbsent都是Map接口中的默認方法&#xff0c;用于在映射中進行鍵值對的計算和更新。它們的主要區別在于它們的行為和使用場景。 compute 方法 定義: V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction);參數: k…

在 WebGPU 與 Vulkan 之間做出正確的選擇(Making the Right Choice between WebGPU vs Vulkan)

在 WebGPU 與 Vulkan 之間做出正確的選擇&#xff08;Making the Right Choice between WebGPU vs Vulkan&#xff09; WebGPU 和 Vulkan 之間的主要區別WebGPU 是什么&#xff1f;它適合誰使用&#xff1f;Vulkan 是什么&#xff1f;它適合誰使用&#xff1f;WebGPU 和 Vulkan…

修改CentOS7 yum源

修改CentOS默認yum源為阿里鏡像源 備份系統自帶yum源配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 下載ailiyun的yum源配置文件 CentOS7 yum源如下&#xff1a; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun…

AI領域最需要掌握的技術是什么?

在AI領域&#xff0c;掌握一系列核心技術和相關知識是非常重要的&#xff0c;以下是AI專業人士最需要掌握的一些關鍵技術&#xff1a; 1. **數學基礎** - 線性代數&#xff1a;用于處理向量和矩陣&#xff0c;是機器學習和深度學習的基石。 - 微積分&#xff1a;用于理解函數的…

SpringBoot項目使用WebSocket提示Error creating bean with name ‘serverEndpointExporter‘

問題描述&#xff1a;WebSocket在Controller中正常工作&#xff0c;但是在之后使用SpringBootTest進行單元測試的時候&#xff0c;突然提示WebSocket的相關錯誤。 錯誤提示&#xff1a; Exception encountered during context initialization - cancelling refresh attempt: …

項目中的代碼記錄日常

項目中的代碼記錄日常 /// <summary> /// 修改任務狀態 /// </summary> private void StartProcess21() {Process21Task new Thread(() >{while (CommonUtility.IsWorking){try{if (tPAgvTasksList.Count > 0){Parallel.ForEach(tPAgvTasksList, new Paral…

gitlab push的時候需要密碼,你忘記了密碼

情景: 忘記密碼,且登入網頁端gitlab的密碼并不能在push的時候使用,應該兩者是兩個不同的密碼 解決方法: 直接設置ssh密鑰登入,不使用密碼gitlab添加SSH密鑰——查看本地密鑰 & 生成ssh密鑰_gitlab生成ssh密鑰-CSDN博客

[OC]蘿卜圈Python手動機器人腳本

這是給機器人設置的端口&#xff0c;對照用 代碼 # #作者:溥哥’ ##機器人驅動主程序 #請在main中編寫您自己的機器人驅動代碼 import msvcrt def main():a"none"while True:key_input msvcrt.getch()akey_inputif abw:print(a)robot_drv.set_motors(1,40,2,40,3,…

uniapp學習筆記

uniapp官網地址&#xff1a;https://uniapp.dcloud.net.cn/ 學習源碼&#xff1a;https://gitee.com/qingnian8/uniapp-ling_project.git 顏色網址&#xff1a;https://colordrop.io/ uniapp中如何獲取導航中的路由信息&#xff1f; onLoad(e){console.log(e)console.log(e.w…

C#根據類的public屬性加載類中對應字段的XML

<?xml version"1.0" encoding"utf-8"?> <root><UserLogin ID"0" UserName"" UserPassWord"" Level"1" PowerName"默認用戶" PowerID"0" Remark"" IsEnabled"…

java八股文面試題

Java八股文面試題通常涵蓋了Java語言的基礎知識、高級特性、框架應用、數據庫操作等多個方面。以下是一些常見的Java面試題及其詳細回答&#xff0c;按照不同的主題進行分類&#xff1a; 一、Java基礎 面向對象的特征有哪些&#xff1f; 抽象&#xff1a;忽略與當前目標無關的…

2.2.4 C#中顯示控件BDPictureBox 的實現----ROI交互

2.2.4 C#中顯示控件BDPictureBox 的實現----ROI交互 1 界面效果 在設定模式下&#xff0c;可以進行ROI 框的拖動&#xff0c;這里以Rect1舉例說明 2 增加ROI類定義 /// <summary> /// ROI_single /// 用于描述圖片感興趣區域 /// type: 0:Rect1;1:Rect2;2:Circle ;3:…

C++ //練習 14.31 我們的StrBlobPtr類沒有定義拷貝構造函數、賦值運算符及析構函數,為什么?

C Primer&#xff08;第5版&#xff09; 練習 14.31 練習 14.31 我們的StrBlobPtr類沒有定義拷貝構造函數、賦值運算符及析構函數&#xff0c;為什么&#xff1f; 環境&#xff1a;Linux Ubuntu&#xff08;云服務器&#xff09; 工具&#xff1a;vim 解釋&#xff1a; 因為…

工業路由器與家用路由器的區別

在現代網絡環境中&#xff0c;路由器扮演著至關重要的角色。無論是在家庭網絡還是在工業網絡&#xff0c;選擇合適的路由器都至關重要。本文將從多個角度&#xff0c;對工業路由器與家用路由器進行詳細比較&#xff0c;幫助您更好地理解二者的區別。 1、安全性 工業路由器&…

大模型應用開發實戰基礎

大模型應用開發實戰基礎 1. 背景 大模型如日中天&#xff0c;各行各業都受它影響&#xff0c;但是作為程序員&#xff0c;除了讓它翻譯代碼不知道用它干什么&#xff0c;就像是拿著錘子的木匠&#xff0c;找不到釘子在哪。一邊聽著別人說2024是AI元年&#xff0c;一邊又不知所…