主頁 > 企業開發 > TypeScript(基礎篇)day01

TypeScript(基礎篇)day01

2022-11-11 07:32:47 企業開發

一.TS介紹

1.1 簡介

ts是2012年由微軟開發,在js的基礎上添加了型別支持

1.2 優劣勢

優勢 :任何位置都有代碼提示,增加效率;型別系統重構更容易;使用最新的ECMAscript語法

劣勢:和有些庫的結合并不是很完美;學習需要成本需要理解介面、泛型、型別等知識

1.3 與js區別

首先要明確,ts的存在只是為了讓編程更便捷,并不是用來取代js的,是因為js是一個弱型別沒有介面泛型而已,

image-20220923174607355

二.環境安裝

首先安裝ts,直接安裝包即可

注意是全域安裝

image-20220923181221800

然后安裝完后記得初始化ts

image-20220923181238448

初試化完之后有一個ts的組態檔,先修改兩個東西

rootdir表示我們的輸入也就是寫的代碼所在的位置

image-20220923181427950

outdir表示代碼會在此檔案輸出

image-20220923181459950

2.1 js的缺陷

有這樣一段js的代碼

image-20220923182346389

當我們運行會發現執行完了第一句就報錯了

image-20220923182409730

原因就不用多說了,這就是js的一個缺陷

這個時候上ts

直接將原代碼放到ts里面來會發現報錯

這里提示什么錯誤用到插件error lens

image-20220923182623510

第一個報錯是我們要把引數規定資料型別

image-20220923182734879

然后發現我們的引數有不符合型別的

image-20220923182751592

所有錯誤清除

image-20220923182802737

注意關鍵步驟來了:

剛才我們定義了一個代碼所在目錄,需要把ts檔案放進去

image-20220923183658293

然后 tsc -watch開啟ts檢測,一旦發現這個ts檔案變化就會有輸出檔案

image-20220923183745937

可以看到我們的ts檔案已經到輸出檔案的dist目錄下,并且已經轉換成js檔案了

image-20220923183834152

這個時候我們直接運行轉換出來的檔案

image-20220923183859111

三.資料型別

3.1 基礎資料型別

首先加一段話

意思表示,如果當我們在src下創建了一些ts檔案有命名沖突的時候不加的話就會報錯,加上就相當于添加了一個模塊作用域不會報命名沖突的錯誤

image-20220927165209771

這是ts三種基礎資料型別,數值、布爾、字串

image-20220927165354995

一定要宣告型別才能夠賦值,而且宣告了什么型別就給什么值

image-20220927165532662

3.2 陣列

陣列有幾種定義的方式

首先單獨定義

image-20220927171127353

單獨定義還有一種方式

image-20220927171203598

第二種是混合定義就是可以定義多個型別

跟第一種有點類似,然后用括號括起來中間用|隔開

image-20220927171313824

最后一種是任意型別

但是并不推薦這種,因為也就失去了ts矯錯的意義

image-20220927171456136

3.3 元祖

用于保存定長長度的陣列和資料型別

tuple

首先它的定義

image-20220927172009544

image-20220927172042151

這個時候就定長了,長度固定少一個不行,多一個不行

image-20220927172106135

而且對應位置的資料型別也固定了,不能顛倒

image-20220927172145201

3.4 any與void

首先any表示任意型別,當我們不清楚值的資料型別時可以用any

場景一:

當變數的值會動態改變,比如用戶的輸入時

可以看到我們這里不論是什么型別都不會報錯

image-20220927174048051

場景二:

改寫現有代碼時,想要去包含或者是移除型別檢查

可以看到我們并沒有定義這個函式,但是也不會報錯,這個時候用any來移除型別檢查,但是要注意這種方式不太安全

image-20220927174232129

場景三:

定義或存盤各種型別資料的陣列

像這樣一個陣列會有限制

image-20220927174452448

這樣就不會了

image-20220927174537706

void

某種意義上來說,void與any是相反的,因為他表示沒有任何型別

常常用于當一個函式沒有回傳值時

比如這樣一個正常函式是沒有問題的

image-20220927175122641

當我加上了void來宣告后

就會報錯return這一行

image-20220927175155164

洗掉后我們才可以正常執行

image-20220927175256140

還有一個點就是當給一個變數宣告為void型別,那么他的值就只能為undefined和null

image-20220927175347953

image-20220927175403122

為null報錯是以為我們開啟了嚴格模式,需要在ts組態檔中將這一行注釋

image-20220927175438311

image-20220927175454768

3.5 null和undefined

他們的作用就不用多說了

首先他們也是一種資料型別要賦值給變數也要進行定義

image-20220927175834760

但是要注意:在非嚴格模式下,他可以賦值給其他資料型別

image-20220927175940656

3.6 never和object

never型別就是一些總是會拋出例外或者根本就不會有回傳值的函式,像這些就可以定義為never型別

image-20221023113138716

object就是定義為一個物件

image-20221023113309963

3.7 列舉

列舉是js標準資料型別的一個補充,可以為一組 數值賦予友好的名字

通過enum來定義

image-20221023115024518

這個時候我將一個變數定義為這個型別,

image-20221023115113041

他就只能為這個型別里面的別名或者說是數值

image-20221023115151660

然后第一個注意點,我給他賦值數值并不會出錯,因為列舉本身就是為數值取一個好聽的別名,它的本質就是數值

image-20221023115247414

而且他默認就是從0開始的

image-20221023115353871

image-20221023115359777

第二個注意點,雖然默認從0開始,但是我們可以手動修改他的起始值,注意雖然這里{}包裹,但是里面是寫為等號賦值

image-20221023115515815

這個時候再去列印

image-20221023115534800

如果修改的是第二個值

image-20221023115550758

image-20221023115557205

如果修改的各自的值

image-20221023115610423

image-20221023115616267

3.8 bigInt和symbol

bigint是用來彌補我們number資料型別最大只能到2^53-1的整數的缺陷

他的定義方法可以直接在后面加n或者呼叫bigint這個方法

注意這是es2020新增的型別,所以要將我們的ts轉到2020來

image-20221023121411939

json檔案里面改

image-20221023121425406

symbol的值是唯一的,獨一無二的

image-20221023121707823

并不相等,即使里面的值都一樣但是他們都為各自的值

image-20221023121734598

3.9 變數宣告與解構

ts的變數宣告解構跟js是一樣的

首先宣告也是:var、let、const

陣列解構:

第一種解構

image-20221023154740247

第二種解構,將剩余的以一個陣列存盤

image-20221023155023305

image-20221023155034112

第三種解構,可以取到我們想要的一個位置的資料

image-20221023155308110

物件解構:

image-20221023155353926

3.10 型別斷言

就是手動指定一個值的型別,不再讓js判斷,我說他是什么就是什么

兩種方式

第一種方式

<>里面定義型別外面接變數名

image-20221023162009472

我如果斷言為number,它不具有length,所以就會報錯

image-20221023162612833

第二種方式

通過一個as相當于取別名的方式來定義

image-20221023162218271

應用:

比如現在有個函式,他的引數型別為number或者string,但是number沒有length所以會報錯

image-20221023162811674

我如果給她強制定義為string就不會出現錯誤

image-20221023162916482

3.11 型別別名

就是給一個型別起一個新名字,里面可有多個資料,都是同一個型別

第一種:

type開頭宣告,中間用|隔開

定義好后變數用別名來修飾,而且變數只能取定義好的資料,包括資料型別也要相同

image-20221023170446156

第二種:函式

用型別別名宣告了一個函式

image-20221023170739235

我要用肯定也要用一個變數,然后用型別別名系結給他,再去定義我們這個函式

image-20221023170843011

它的作用就是定義好了后,這個函式就只能回傳number型別,其他型別都不行

image-20221023170918811

第三種:物件

定義好之后系結給變數,我們的當前這個屬性就只能用規定好的資料型別了

image-20221023171049959

四.介面

4.1 介面基本使用

介面是一系列抽象方法的宣告,是一些方法特征的集合

interface來定義,跟type很像,但是有區別的,后面會說

定義一個介面

image-20221023171836976

然后我這邊要用同樣是系結給他,宣告自己的資料

image-20221023171933178

函式的使用

引數采用解構賦值直接拿,然后通過定義好的介面去約束他們,再把函式定義為void型別,也就是沒有回傳值

image-20221023172237240

4.2 可選屬性與只讀屬性

在我們定義介面時,某些屬性可以省略我們約束的時候可以不賦值叫做可選屬性,用?修飾

沒有修飾可選屬性,不寫的話會報錯

image-20221023175015614

寫為可選

image-20221023175032251

只讀屬性就是只能讀取,不能修改,readonly來修飾

沒有只讀屬性時是可以修改的

image-20221023175217345

給到只讀屬性后

image-20221023175237463

我們的const和readonly的區別

因為他們兩個都是不可以修改只能夠讀取

雖然作用大致一樣,但是用處不一樣,一般一般要作為變數使用就是用const來修飾,如果要作為屬性使用就用readonly

4.3 索引簽名

用于描述那些通過索引得到的型別,解決引數問題

當我們定義好介面,如果少一個引數我們可以用可選屬性來將其可要可不要

但是如果多一個引數呢?

三種方法
第一種:不推薦

可以看到我如果直接加在后面會報錯

image-20221024095648948

但是我給一個物件之后再加在后面就不會報錯了

image-20221024095722851

這是因為ts的檢測是淺檢測,我們直接加在后面是一層,但是中間有個物件物件里面再來一個物件,就屬于深層次了,就檢測不到了,所以這種理論上是不允許的,只是我們投機取巧,不推薦

第二種:

通過型別斷言

我們說過型別斷言,就是我自己來宣告,加上了之后就相當于脫離了ts的校驗規則,你想定義什么就定義什么沒有人管得到你了,注意這里是給這個變數型別斷言,所以只能斷言為people或者any

image-20221024100543026

第三種:

索引簽名

給我們介面添加一個中括號里面props是變數名隨便取,第一個string為我們屬性名的型別定義,要注意物件屬性名會自動給你變成字串,就算你沒添加引號也是字串,后面則是規定我們值為什么型別

image-20221024100843539

這樣我們也可以隨便添加任意型別的引數了

4.4 函式介面

函式的介面需要定義一個呼叫的引數的簽名以及回傳值的型別

image-20221024104037701

介面與陣列

注意一下我們的介面和陣列怎么來使用,長得很像索引簽名,但其實不是,前面定義的其實是我們陣列的下標,所以只能為number型別,后面是陣列里面每一項的值型別

image-20221024105633413

4.5 介面繼承

介面可以繼承介面用到另一個介面上的屬性約束 extends

單繼承:

image-20221024110149886

多繼承:

用逗號隔開

image-20221024110254424

4.6 介面的混合型別

就是可以將介面里面多個型別混合在一起定義,包括屬性、函式等

因為我們之前都是單獨對物件或者函式進行介面約束,那么如果要進行一個混合型別介面,以函式為例,先系結給一個函式

image-20221024114148152

函式里面先定義好我們的函式,并且提示需要回傳值

image-20221024114634510

添加回傳值后提示缺少定義好的兩個屬性

image-20221024114654954

直接將counter型別斷言為Counter并將屬性系結上去

可以看到此時這個counter即為函式又為物件

又可以使用自己函式,又可以呼叫物件屬性

image-20221024115057198

image-20221024115106225

image-20221024115113941

image-20221024115118507

image-20221024115122197

image-20221024115126387

4.7 介面和型別別名的異同點

主要是兩同兩異

相同一:

都可以描述屬性或者方法

這里分別用型別別名和介面定義了兩個屬性一個方法,都沒有報錯

image-20221024115843551

應用上去也沒問題

image-20221024115947111

相同二:

都允許擴展

注意型別別名擴展是用&連接

image-20221024120143959

介面的擴展前面有說extends來連接

不同點一:

type可以宣告基本資料型別、聯合型別、陣列等等,而介面只能宣告物件,函式也是物件

image-20221024120724487

注意:這是或者的意思,比如在陣列那里有且只有第一個值,有第二個值就會報錯

不同點二:

type不能進行合并,介面可以

image-20221024120901573

image-20221024120917758

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/531509.html

標籤:JavaScript

上一篇:記錄--Uniapp + TypeScript 配置檔案

下一篇:第一百零七篇:基本資料型別(undefined,null,boolean型別)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more