TypeScript基礎知識:類型推導和上下文類型化

????????在 TypeScript 中,類型推導和上下文類型化是兩個重要的概念。它們使得代碼編寫更加簡潔、可讀性更高,并且幫助我們避免冗余的類型注解。本文將深入探討這兩個概念,并通過示例代碼演示它們的用法和好處。

一、類型推導

????????類型推導是 TypeScript 的一個強大特性,它能夠根據變量的值自動推斷出其類型。這樣一來,我們無需顯式地為每個變量添加類型注解,而是讓 TypeScript 根據上下文自動推導出最合適的類型。

let num = 10; // TypeScript 推斷 num 的類型為 number
let message = "Hello, TypeScript!"; // TypeScript 推斷 message 的類型為 string
let isActive = true; // TypeScript 推斷 isActive 的類型為 boolean// 推導出數組的元素類型
let numbers = [1, 2, 3]; // TypeScript 推斷 numbers 的類型為 number[]
let names = ["Alice", "Bob", "Charlie"]; // TypeScript 推斷 names 的類型為 string[]

通過類型推導,我們可以省去顯式添加類型注解的步驟,使得代碼更加簡潔和易于維護。

二、上下文類型化

????????上下文類型化是指 TypeScript 根據表達式所在的上下文環境來推導出表達式的類型。這種類型推導方式在函數調用、賦值操作和對象字面量等場景中非常有用。

// 函數調用中的上下文類型化
function greet(name: string) {console.log("Hello, " + name.toUpperCase() + "!");
}let username = "Alice";
greet(username); // TypeScript 根據 greet 函數的參數類型推導出 username 的類型為 string// 賦值操作中的上下文類型化
let x = [1, 2, 3];
let y = x; // TypeScript 推斷 y 的類型為 number[],與 x 的類型相同// 對象字面量中的上下文類型化
interface Point {x: number;y: number;
}function printPoint(point: Point) {console.log("x:", point.x);console.log("y:", point.y);
}let point = { x: 10, y: 20 };
printPoint(point); // TypeScript 根據 printPoint 函數的參數類型推導出 point 的類型為 Point

通過上下文類型化,我們可以利用已知的上下文信息來推導出更精確的類型,減少不必要的類型注解。

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

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

相關文章

day06_菜單管理(查詢菜單,添加菜單,添加子菜單,修改菜單,刪除菜單,角色分配菜單,查詢菜單,保存菜單,動態菜單)

文章目錄 1 菜單管理1.1 表結構介紹1.2 查詢菜單1.2.1 需求說明1.2.2 頁面制作1.2.3 后端接口SysMenuSysMenuControllerSysMenuServiceMenuHelperSysMenuMapperSysMenuMapper.xml 1.2.4 前端對接sysMenu.jssysMenu.vue 1.3 添加菜單1.3.1 需求說明1.3.3 頁面制作1.3.3 后端接口…

【git隨筆,日常積累】

Git常用基礎 branch 查看所有分支: git branch -a切換到分支:git checkout develop創建分支并切換到:git checkout -b develop創建一個新分支:git checkout --orphan new_branch --orphan 選項用于創建一個沒有歷史記錄的分支 刪…

騰訊云安裝MYSQL遠程連接不上解決方案

推薦安裝步驟博客,寫的很詳細,如果不會安裝的話,可以根據安裝步驟一直走。 Windows10下超詳細Mysql安裝_win10安裝mysql-CSDN博客 修改 my.cnf或者my.ini 找到里面bind-address將bind-address 127.0.0.1設置成bind-address 0.0.0.0&#x…

AI英語學習助手-幫助建立詞庫和句子-極簡安裝(python基于Django和 OpenAI GPT API的網站程序)

AI英語學習助手-幫助建立詞庫和句子-極簡安裝(python基于Django和 OpenAI GPT API的網站程序) 學了很久的英語,但是發現還是被單詞困住了,天天查句子查單詞太麻煩,現在有了Chat GPT,能夠很好得幫助學習英語…

CSP-202109-2-非零段劃分

CSP-202109-2-非零段劃分 【70分思路-暴力枚舉】 這段代碼的目的是在給定一個由自然數(非負整數)組成的數組后,通過選擇一個適當的正整數 p,將數組中所有小于 p 的數變為 0,從而使得數組中非零段的數量達到最大。這里…

使用 gma 繪制隋唐洛陽城

背景 最近河南文旅大伙,給家鄉帶了一波熱度,想想又是王子又是公主,著實羨慕。出門在外,還是對加很有感覺得,不過很遺憾,本人不能為家鄉做出貢獻,只能使用這種小伎倆,稍稍展示&#…

【網絡編程】理解客戶端和服務器并使用Java提供的api實現回顯服務器

目錄 一、網絡編程 二、客戶端和服務器 三、客戶端和服務器的交互模式 四、TCP 和 UDP UDP socket api 的使用 1、DatagramSoket 2、DatagramPacket TCP socket api 的使用 1、ServerSocket 2、Socket 一、網絡編程 本質上就是學習傳輸層給應用層提供的 api&#x…

Leetcode 128. 最長連續序列

最長連續序列 給定一個未排序的整數數組 nums ,找出數字連續的最長序列(不要求序列元素在原數組中連續)的長度。 請你設計并實現時間復雜度為 O(n) 的算法解決此問題。 示例 1: 輸入:nums [100,4,200,1,3,2] 輸出&am…

ARM簡介

ARM:ARM是Advanced RISC Machine的縮寫,意為高級精簡指令集計算機。 英國ARM公司,2016年被軟銀創始人孫正義斥資320億美元收購了。現在是軟銀旗下的芯片設計公司,總部位于英國劍橋,專注于設計芯片,賣芯片生…

揭秘:頭部房企如何借助數據分析實現穩健發展?

房地產行業是我國國民經濟中的重要支柱產業之一,在房地產市場供求關系發生重大變化的當下,房企面臨多重挑戰。Kyligence 服務的這家頭部房企把發展的重點聚焦于內生,關注內生的轉化率、接管的效率以及內生毛利率的提升,引入 Kylig…

基于springboot實現保險信息網站系統項目【項目源碼+論文說明】計算機畢業設計

基于springboot實現保險信息網站系統演示 摘要 隨著互聯網的不斷發展,現在人們獲取最新資訊的主要途徑來源于網上新聞,當下的網上信息宣傳門戶網站的發展十分的迅速。而保險產品,作為當下人們非常關注的一款能夠給人們帶來醫療、生活、養老或…

面試筆記系列七之多線程+分布式系統基礎知識點整理及常見面試題

目錄 多線程 介紹一下線程的生命周期及狀態? 線程的sleep、wait、join、yield如何使用? sleep與yield方法的區別在于, 進程調度算法 創建線程有哪些方式? 什么是守護線程? ThreadLocal的原理是什么,…

當大語言模型遇到AI繪畫-google gemma與stable diffusion webui融合方法-礦卡40hx的AI一體機

你有想過建一臺主機,又能AI聊天又能AI繪畫,還可以直接把聊天內容直接畫出來的機器嗎? 當Google最新的大語言模型Gemma碰到stable diffusion webui會怎么樣? 首先我們安裝stable diffusion webui(automatic1111開源項目&#xff…

微信小程序構建npm失敗解決方式

安裝完所需要的依賴后,在微信開發者工具菜單欄中選擇:“工具” -> “構建 npm”,但是失敗。 解決方法:修改 project.config.json 開發者工具創建的項目,miniprogramRoot 默認為 miniprogram,package.js…

數據遷移DTS | 云上MySQL 數據庫遷移至達夢數據庫

引入 云上 MySQL 數據庫 —> 向達夢國產化數據庫遷移 下載&安裝 達夢客戶端工具 DM->可參考之前國產化專欄達夢文章 創建模式 在客戶端分別依次執行以下命令腳本(這里沒有通過客戶端管理工具去創建達夢數據庫的模式,當然也可以通過圖形化界…

WordPress通過寶塔面板的入門安裝教程【保姆級】

WordPress安裝教程【保姆級】【寶塔面板】 前言一:安裝環境二:提前準備三:域名解析四:開始安裝五:安裝成功 前言 此教程適合新手,即使不懂代碼,也可輕松安裝wordpress 一:安裝環…

node如何解析前端傳遞過來的命令行字符串

node如何解析前端傳遞過來的命令行字符串 在Node.js中,如果你想處理從前端傳遞過來的命令行字符串,你可以根據你的應用程序的架構來決定如何接收這些字符串,然后進行解析。一般來說,命令行字符串可能會通過HTTP請求(如…

視頻在線轉換,四種方法任你選!(建議收藏)

在當今的數字時代,視頻已經成為人們日常生活中不可或缺的一部分。我們通過視頻分享知識、表達創造力、觀看娛樂節目,甚至參與遠程學習和工作。然而,隨著視頻格式的多樣化和設備的激增,我們經常會遇到一個常見的問題:視…

Linux(CentOS)學習

一、認識Linux 1、如何修改Linux時區 2、配置固定IP 3、重啟網絡服務 3、小技巧快捷鍵 4、環境變量設置 5、Linux文件的上傳和下載 6、壓縮和解壓 二、基礎命令 1、目錄命令 (1、)查看目錄內容(ls) 1、ls //查看當前目錄內容 2、- a //顯示隱藏內容 3…

深入理解Lucene:開源全文搜索引擎的核心技術解析

1. 介紹 Lucene是什么? Lucene是一個開源的全文搜索引擎庫,提供了強大的文本搜索和檢索功能。它由Apache軟件基金會維護和開發,采用Java語言編寫,因其高性能、可擴展性和靈活性而備受歡迎。 Lucene的作用和應用場景 Lucene主要…