TS基礎語法

前言:

因為在寫前端的時候,發現很多UI組件的語法都已經開始使用TS語法,不學習TS根本看不到懂,所以簡單的學一下TS語法。為了看UI組件的簡單代碼,不至于一臉懵。

一、安裝node

對于windows來講,node版本高點還好,對于linux(centos7)來講,盡量使用node16或者node18版本,太高linux的動態庫不支持,需要升級動態庫

E:\vuecode\練習>node -v
v18.12.1 

二、安裝typescript

E:\vuecode\練習>npm -g install typescript
added 1 package in 672ms#查看版本
E:\vuecode\練習>tsc -v
Version 5.3.3

三、基本語法

1.數據類型

1.1 聲明變量

ts最大的特點就是聲明了數據類型。樣例代碼如下:
聲明數字類型和字符串類型

let n1: number
n1 = 10let s1: string
s1 = "hello world"console.log(n1,s1)

將ts文件編譯成js文件,并運行js文件

E:\vuecode\練習>tsc test1.ts  
E:\vuecode\練習>node test1.js
10 hello world

1.2 自動識別類型

這里沒有聲明變量的類型,在將字符串賦值給n1的時候,ts的編譯器檢測出了語法問題

let n1 = 10
console.log(n1)n1 = "hello world"
console.log(n1)
E:\vuecode\練習>tsc test1.ts  
test1.ts:4:1 - error TS2322: Type 'string' is not assignable to type 'number'.4 n1 = "hello world"~~

2.特殊數據類型

2.1 any 任意類型

let a: any = 1
console.log(a)a = "hello world"
console.log(a)a = true
console.log(a)a = [1,2,3,4]
console.log(a)執行結果如下
E:\vuecode\練習>node test1.js
1
hello world   
true
[ 1, 2, 3, 4 ]

開發中不建議使用any類型

2.2 聯合類型

限定了a的取值范圍

let a: 1 | 2
a = 1
console.log(a)a = 2 
console.log(a)#這里會報錯,不能將3賦值給a
let a: 1 | 2
不能將類型“3”分配給類型“1 | 2”。ts(2322)
a = 3 
console.log(a)

限定a的賦值類型范圍

let a: number | string
a = 1
a = "hello"#這樣超出了a的取值類型范圍
a = true

2.3 unknown

let a: unknown
a = "hello"
console.log(a)a = 1
console.log(a)a = true
console.log(a)

unknow的二次賦值

let a: unknown
a = "hello"此時將unknown類型的a 賦值給b就不可以了。因為類型不匹配
let b: string
b = a解決辦法有兩種
1.類型斷言
b = a as string2.聲明變量的類型
b = <string>a

2.4 void

void表示空,一般用于函數沒有返回值

function test(): void {console.log(111)
}

2.5 never

什么值都沒有,空也不會返回

3.對應js的類型的ts類型

3.1 object

object表示js中的對象,在開發中object使用的比較少。因為限制變量是不是對象的情況比較少,主要是限制對象中的屬性的類型以及屬性的數量。

3.1.1 基本定義:

不限制對象中屬性的數量以及屬性值的類型
寫法1:

let o1: {} #或者 let o1: object
o1 = {name: "zhangsan",age: 20}
console.log(o1)

寫法2:
表示對象中可以有任意string類型的key,值的類型為任意

let b: {[anyname: string]: any}
b = {name: "zhangsan",age: 20, gender:"男"}
console.log(b)
3.1.2 限定對象的屬性數量

正確賦值

let a: {name: string}
a = {name: "zhangsan"}
console.log(a)

錯誤賦值,因為對象限制了屬性只有name

let a: {name: string}
a = {name: "zhangsan",age: 20}
3.1.3 設定可選屬性

有這種場景,設定了對象中有多個屬性,一個必須的,其他的可以不傳遞。也可以傳遞。
其中屬性名后邊的 “?” 就是設定屬性為可選屬性

let o1: {name: string,age?:number,gender?:string}
o1 = {name: "zhangsan"}
console.log(o1)o1 = {name: "lisi",age: 20}
console.log(o1)o1 = {name: "wangwu",gender:"boy"}
console.log(o1)o1 = {name:"張無忌",age: 100, gender:"boy"}
console.log(o1)執行結果如下:
E:\vuecode\練習>tsc test1.ts  
E:\vuecode\練習>node test1.js
{ name: 'zhangsan' }
{ name: 'lisi', age: 20 }
{ name: 'wangwu', gender: 'boy' }
{ name: '張無忌', age: 100, gender: 'boy' }
3.1.4 設定固定屬性,其余屬性不定長
let o1: {name: string,[anyname: string]: any}
o1 = {name: "zhangsan",age: 20 ,gender: "girl",class: 3}
console.log(o1)E:\vuecode\練習>tsc test1.ts  E:\vuecode\練習>node test1.js
{ name: 'zhangsan', age: 20, gender: 'girl', class: 3 

3.2 數組

定義方式一:

let a1: number[]
a1 = [1,2,3,4,5]
console.log(a1)

定義方式二

let a2: Array<number>
a2 = [1,2,3,4,5]
console.log(a2)

3.2 元組

元組和數組的區別是元組的的長度是固定的

let t1: [string,number]
t1 = ["zhangsan",10]

4.type關鍵字

type的作用主要是給數據類型起一個別名

例如:

type num = number
let n1: num = 10console.log(n1)

5.反引號

反引號是ES6中的 模板字符串。
這是比較常用的一種,在字符串中插入變量

let name1 = "zhangsan"
let age  = 20console.log(`我的名字叫${name1},我${age}歲了`)

四、泛型

1.定義使用泛型

在定義函數或者是類時,對于類型不明確的時候就就可以使用泛型。例如:

function test<T>(content: T): T{return content
}

解釋:
定義函數test的時候,不能確定content參數的類型是什么類型,這時候使用泛型
第一個T 是定義了一個泛型T
第二個T 是定義content參數是一個泛型類型的參數
第三個T 是定義 返回值的類型是T類型

2.使用

2.1 方式1:

利用ts的對數據類型的自動推斷功能,進行傳值,將鼠標分別放在r1,r2,r3,r4的上邊,可以看到它們的類型。也就說你傳遞的什么類型的值,就返回什么類型的值

function test<T>(content: T): T{return content
}let r1 = test(10)
let r2 = test("hello")
let r3 = test([1,2,3,"hello"])
let r4 = test({name:"zhangsan"})
2.2 方式2:

當有時候,當給函數傳遞的類型比較復雜時候,TS無法自動推斷出類型時,需要手動聲明傳遞的參數的類型,代碼如下

function test<T>(content: T): T{return content
}向test函數聲明傳遞的參數為string
let r1 = test<string>("hello")向test函數聲明傳遞的參數為一個內容包含數字和字符串的數組
let r2 = test<(number|string)[]>([1,2,3,"hello"])向test函數聲明傳遞的參數為一個只有name和age的對象
let r3 = test<{name:string,age:number}>({name: "zhangsan",age: 20})

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

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

相關文章

電腦出現這些現象,說明你的固態硬盤要壞了

與傳統機械硬盤&#xff08;HDD&#xff09;相比&#xff0c;固態硬盤&#xff08;SSD&#xff09;速度更快、更穩定、功耗更低。但固態硬盤并不是完美無瑕的&#xff0c;由于顆粒寫入機制&#xff0c;可能會在七到十年的預期壽命之前出現故障。所以用戶最好為最終故障做好準備…

網頁設計中增強現實的興起

目錄 了解增強現實 增強現實的歷史背景 AR 和網頁設計的交叉點 AR 在網頁設計中的優勢 增強參與度和互動性 個性化的用戶體驗 競爭優勢和品牌差異化 AR 在網頁設計中的用例 結論 近年來&#xff0c;增強現實已成為一股變革力量&#xff0c;重塑了我們與數字領域互動的方式。它被…

【FMCW毫米波雷達設計 】 — FMCW波形

原書&#xff1a;FMCW Radar Design 1 引言 本章研究驅動FMCW雷達的主要波形:線性調頻(LFM)波形。我們研究信號的行為及其性質。隨后&#xff0c;本章討論了匹配濾波理論&#xff0c;并研究了壓縮這種波形的技術&#xff0c;特別是所謂的拉伸處理&#xff0c;它賦予FMCW雷達極…

DOS 批處理 (二)

DOS 批處理 1. 基礎 DOS 命令1.1 基礎命令1.2 文件系統操作1.3 文件夾管理1.4 文件管理1.5 網絡相關1.6 系統管理1.7 IF、FOR和NETIFFORNET 1. 基礎 DOS 命令 command /? 查找幫助DOS命令不區分命令字母的大小寫 C:\Users\Administrator>echo 1 1 C:\Users\Administrator…

基于SSM框架的倉庫管理系統

基于SSM框架的倉庫管理系統 文章目錄 基于SSM框架的倉庫管理系統 一.引言二.系統設計三.技術架構四.功能實現五.界面展示六.源碼獲取 一.引言 現代商業環境中&#xff0c;倉庫管理對于企業的運營效率和客戶滿意度至關重要。傳統的手工管理方式已經無法滿足日益復雜的倉儲需求。…

【Spring】SpringBoot日志

SpringBoot日志 日志概述日志使用打印日志獲取日志對象使用日志對象打印日志日志框架介紹門面模式SLF4J框架介紹(simple logging facade for java) 日志格式說明日志級別日志級別的分類日志級別的使用 日志配置配置日志級別日志持久化配置日志文件的路徑和文件名配置日志文件的…

【刷題篇】動態規劃(六)

文章目錄 1、最大子數組和2、環形子數組的最大和3、乘積最大子數組4、乘積為正數的最長子數組長度5、 等差數列劃分6、最長湍流子數組 1、最大子數組和 給你一個整數數組 nums &#xff0c;請你找出一個具有最大和的連續子數組&#xff08;子數組最少包含一個元素&#xff09;&…

【Unity動畫】Avatar Mask

創建 Avatar Mask可以設置那一部分骨骼運動和不運動 然后放在狀態機里面的層中來混合 【后續完善】

深入探索 Rust 宏編程

Rust 宏提供了一種強大的方法來編寫抽象和重用代碼,它們在 Rust 編程中扮演著重要的角色。本文將深入探索 Rust 宏的概念、類型、使用方法以及如何實現自定義宏,以提供一個全面的 Rust 宏編程指南。 Rust 宏簡介 宏是 Rust 中的一種元編程工具,它們在編譯時運行,用于生成…

linux安裝node

文章目錄 安裝node 安裝node 一次手操記錄 - 首先安裝wget yum install -y wget - 下載nodejs最新的tar包 wget https://cdn.npm.taobao.org/dist/node/v12.12.0/node-v12.12.0-linux-x64.tar.xz - 解壓包 tar -xvf node-v12.12.0-linux-x64.tar.xz - 部署bin文件 先確認你no…

30 張圖解 HTTP 常見的面試題

前言 在面試過程中&#xff0c;HTTP 被提問的概率還是比較高的 我搜集了 5 大類 HTTP 面試常問的題目&#xff0c;同時這 5 大類題跟 HTTP 的發展和演變關聯性是比較大的&#xff0c;通過問答 圖解的形式由淺入深的方式幫助大家進一步的學習和理解 HTTP 協議。 HTTP 基本概…

第四節JavaScript 條件語句、循環語句、break與continue語句

一、JavaScript條件語句 在通常的代碼中&#xff0c;我們有一些需要決定執行不同動作&#xff0c;這就可以在代碼中使用條件語句來完成。 下面是我們常使用的條件語句&#xff1a; if語句&#xff1a;只有當指定條件是true時&#xff0c;執行條件內代碼。if…else語句&#…

JavaScript數組的長度

JavaScript數組的長度可以通過數組對象的length屬性來獲取&#xff0c;長度表示數組中元素的數量。 代碼示例&#xff1a; let arr []; // 定義一個空數組 console.log(arr.length); // 輸出 0arr.push(1); // 給數組添加元素 arr.push(2); arr.push(3); console.log(arr.le…

項目二 創建與操作學生管理數據庫

項目二 創建與操作學生管理數據庫 #目標 創建庫&#xff1b;查看庫&#xff1b;操作庫&#xff1b;圖形工具操作庫1&#xff0c;創建學生管理數據庫 #創建數據庫 CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collat…

44.0/認識前端

44.1 目錄 44.1.1 網頁 44.1.1.1 網頁的組成 44.1.1.2 網頁的分類 44.1.2 網站 44.1.2.1 網站的分類 44.1.3 主頁 44.2. Internet、IP 地址和域名 44.2.1 Internet 44.2.2 IP 44.2.3 域名 44.3. Web 前端技術概述 44.3.1 html5 44.3.2 CSS3 44.3.3 Javascript …

hbuiler中使用npm安裝datav

注&#xff1a;datav邊框樣式目前使用時&#xff1a;適用于網頁&#xff0c;不適用于app 1、先安裝node 安裝、配置Node路徑 2、為Node配置環境變量 3、在hbuilder的設置中填寫node的路徑 配置 4、打開cmd輸入npm install jiaminghi/data-view 安裝dataV&#xff0c;&…

當初為什么選擇計算機-希望一直干下去

還記得當初自己為什么選擇計算機&#xff1f; 當初你問我為什么選擇計算機&#xff0c;我笑著回答&#xff1a;“因為我夢想成為神奇的碼農&#xff01;我想像編織魔法一樣編寫程序&#xff0c;創造出炫酷的虛擬世界&#xff01;”誰知道&#xff0c;我剛入門的那天&#xff0…

.360勒索病毒數據恢復|金蝶、用友、管家婆、OA、速達、ERP等軟件數據庫恢復

尊敬的讀者&#xff1a; 在數字時代&#xff0c;.360勒索病毒如同數字的幽靈&#xff0c;悄無聲息地侵入用戶的數字領域&#xff0c;將珍貴的數據文件變為數字的囚牢。本文將介紹.360勒索病毒的特征&#xff0c;提供解密和數據恢復的方法&#xff0c;并分享有效的預防措施&…

【PID學習筆記 9 】控制系統的分析方法之二

寫在前面 前文重點介紹時域分析法、本文將繼續學習控制系統的另外幾種分析方法&#xff0c;包括根軌跡法、頻率分析法、狀態空間分析法。再次強調&#xff0c;在這里只是做了一個系統化的概述&#xff0c;目的是讓學習PID&#xff0c;特別是用PID的工程人員有一個對基礎知識的…

【開源】基于JAVA語言的數字化社區網格管理系統

項目編號&#xff1a; S 042 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S042&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S042&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊三、開發背景四、系統展示五、核心源碼5…