自學 TypeScript 第一天 環境開發配置 及 TS 基本類型聲明

来源:https://www.cnblogs.com/LiuSan/archive/2022/11/16/16896358.html
-Advertisement-
Play Games

前言: 自學第一天,什麼是TS ,為什麼要用 TS TS 全程 Typed JavaScript at Any Scale 解釋起來就是 添加了類型系統的 JavaScript, 是 JavaScript 的一個超集 讓 JS 從動態類型的語言,變成了一個靜態類型的語言,給變數賦予了類型 好,到這裡 ...


前言: 

自學第一天,什麼是TS ,為什麼要用 TS

 TS 全程 Typed JavaScript at Any Scale 解釋起來就是 添加了類型系統的 JavaScript, 是 JavaScript 的一個超集

讓 JS 從動態類型的語言,變成了一個靜態類型的語言,給變數賦予了類型

好,到這裡有同學就會問了,什麼是動態類型,什麼是靜態類型,啥是給變數賦予類型?讓我們來看下邊這一個慄子:

let a ;
a = "a";
a = 10;

我們先來看第三步,10 是有類型的吧,類型是 number ,第二步也同理,此時回過頭來,我們再看第一步,a 是什麼類型?

a 在第一步的時候,沒有類型, 就是一個變數

這就是 JS 中的動態類型,a 什麼都可以存放,TS 就不同 你 let 了一個 String 類型的 a ,你就只能存放 String 類型

PS:擴展

有的同學就會說了,這樣動態類型怎麼了,很方便啊,啥都能放不好嗎?

對,是很方便,靈活,但卻是一把雙刃劍,我們舉個慄子:

funtion fun(a,b){
.....
}

我們給 fun 傳了倆參數一個 a,一個 b 這時候 a 和 b 有類型嗎,也沒有類型

問題這就來了

假如這時候我要算一個加法,就是想要 a 和 b 加一塊的數值,按理來說我們做加法,傳的時候就該傳數字了,但 JS 這一塊你愛傳傳啥,我不管,隨便你傳

如果這時 a 和 b 這倆值又在別處 經歷了其他運算,這時候 JS 會把這個錯誤埋起來,我不立刻報錯

假如我們的這個運算是在第三行寫的,他不立刻報錯可能在三千行,三萬行在報錯,那維護成本,誰找錯誰知道...

最後上圖:

總結一下上圖的內容,TS 是以 JS 為基礎搭建的語言,是一個 JS 的超集。

可以在任何支持 JS 的平臺中執行,也就是說 TS 完全相容 JS

不能被 JS 解析器直接執行,TS 不能直接被瀏覽器識別需要編譯成 JS 

TS 擴展了 JS ,但不能取代 JS

開發環境:

好了介紹了這麼多,大家都對 TS 有了一個基本的概念了吧,現在我們第一天的正式學習

首先要想寫 TS 我們第一件事就是要搭建一個 TS 的開發環境,用 Node.js 來解析 TS

1. 下載 Node.js 

地址 : http://nodejs.cn/download/

2. 安裝 Node.js

3. 使用 npm 全局安裝 TypeScript :

npm install -g typescript

安裝完之後輸入 tsc 出一堆 不報錯就代表安裝完成了 接下來讓我們開始寫吧

 

 

 

首先我們在創建一個尾碼名為 ts 的文件,然後隨便用什麼東西打開寫一段 js 代碼 因為 ts 是完全相容 js 的

所以我們這裡就寫一個簡單的 console

ts 文件是不能被網頁識別的 這時候就要進行編譯了 

基本類型聲明:

我們都知道 JavaScript 的類型分為兩種:一種是原始數據類型(Primitive data types)另一種是對象類型(Object types)

現在我們來看原始數據類型,也就是布爾值,數值,字元串,null,nudefined 在 TS 中如何聲明

 

 

 

如圖,let a :number 之後 ,在以後的使用過程中 a的值 只能是數字,如果賦值字元串的話,會明確的告訴你錯誤信息

當然,我們也可以直接這樣聲明並賦值:

let a : number = 10 ;

但這種語法在實際我們寫 TS 過程中是不常用的,TS的變數聲明和賦值是同時進行的,TS可以自動對變數進行類型檢測

 

 

 

類型聲明也可以用於函數上邊

JS 中的函數是不考慮參數的類型和個數的

 

TS 中 

當然 TS 相對嚴格你傳多傳少也是會報錯的

 

你也可以給函數的返回值添加類型,比如

其他基本類型:

類型例子描述
number 1, -33, 2.5 任意數字
string 'hi', "hi", hi 任意字元串
boolean true、false 布爾值true或false
字面量 其本身 限制變數的值就是該字面量的值
any * 任意類型
unknown * 類型安全的any
void 空值(undefined) 沒有值(或undefined)
never 沒有值 不能是任何值
object {name:'孫悟空'} 任意的JS對象
array [1,2,3] 任意JS數組
tuple [4,5] 元組,TS新增類型,固定長度數組
enum enum{A, B} 枚舉,TS中新增類型

上邊我們演示了前三個,接下來我們來看後邊

字面量

什麼是字面量,廢話不多說直接上圖

此時的 a 只能是 數字 10 ,當然這種是不常用的,我們一般都這樣使用,取一個字面量的範圍,我也叫這種為(聯合類型)

當然聯合類型不只用於字元串,我們也可這樣

any

any的意思就是隨便,愛啥啥

註意的一點是,一個變數設置為 any 後(顯示的 any ),就相當於該對象關閉了 TS 的類型檢測,使用 TS 時候不建議使用 any 

當然這還不最可怕的一點,最可怕的是

此時的 d 類型 還是 any 。所以聲明變數如果不指定類型,則 TS 解析器會自動判斷變數的類型為 any (隱式的 any )

雖然不建議使用,但代碼是死的,人是活的,因為 JS 是靈活的,在一些開發的過程中,你就是不知道那個值是什麼,或者說是不確定,這時我們可以用 any 或 unknown

unknown

字面意思很明顯,unknown --> 我不知道 ,也是表示未知類型的值

這時就有人問了,誒六扇老師,這和 any 一樣啊,沒什麼區別啊

別急,看圖,區別這就來了

我們來看,變數 s 是 string 類型,而 變數 d 是 any 值是 字元串10 卻成功賦值沒有報錯,也就是說這玩意不止霍霍自己,還霍霍別人

而 unknown 就不一樣了

unknown 實際上就是一個類型安全的 any ,unknown 類型的變數,不能直接賦值給其他變數

這會又會有人問了,六扇老師,我就想讓 unknown 賦值給 s 怎麼辦?

第一種方法,在前邊加上一個類型判斷

用 typeof 判斷 e 是不是 string 是的話 賦值

方法二,在 TS 裡面有一個叫 類型斷言,先別管什麼意思,我們直接看圖

空值(Void

JS裡面是沒有 Void 的概念, 在 TypeScript 中,可以用 Void 表示沒有任何返回值的函數

上文我們也說了,我們也可以給函數設置返回值的類型,在某些情況下我們寫的函數是沒有返回值的,此時就用到了 Void 

never

和空不一樣,其實沒有返回值,也是一種返回,never是表示永遠不會返回結果

在我們寫代碼的時候,有一種函數是用來處理報錯,不會返回直接報錯,就可以用never

不常使用,瞭解就行

複雜的類型,object

我們可以跟上邊設置類型一樣,也可給 a 設置一個 object 類型,但這種不常用,通常我們都直接給後邊加 { } 來設置類型

{ } 也可以用來指定對象可以包含哪些屬性,比如這時的 b 只能給它賦值 對象且裡面帶有 name 是 string 類型的,多一個不行,少了也不行

那六扇老師,我就想添加屬性怎麼辦?

看下圖

在屬性名後邊加上 ?代表可選屬性,就是有沒有都行的屬性,可加,可不加

效果是達到了,但好麻煩啊,六扇老師我就想 name 是固定值,後邊不管,愛怎麼加怎麼加行不?

好,這位同學很會問問題,看完下圖之後叉出去

[propName:string] 表示 我這個屬性是字元串類型, propName 不是固定的,可以隨便寫,比如放個 xxx 也是行得通的

  :any 表示任意類型

那回過頭再看代碼,這段代碼的意思就是除了 name 是 字元串類型以外,後邊其他的我不管,隨便

其實和前邊提到的字面量差不多,都是給一個限制

還有一種寫法是設置函數結構的類型聲明:

 

數組

和對象一樣,我們不是要什麼對象,而是要存放什麼類型的數組

還有一種語法,在後邊加 Array<string>

以上就是我們 JS 裡面的數據類型,下邊我們來講倆不一樣的 TS 中新增的類型

 tuple(元組)

什麼意思呢,就是固定長度的數組

當數組裡面的值是固定的時候,用元組是最好的選擇,性能上會強一點

enum 枚舉

在我們存儲數據的時候,我們儘可能的希望數據小,像性別這種,除了男或者就是女這種值我們可以用 0 或 1 代替,但數據確實笑了,方便了,麻煩來了

這個值是我們定義的,我們知道,但別人不知道啊,這時就要用到 enum(枚舉) 定義一個枚舉類

我們 enum 了一個 Gender 裡面 Male 表示男,Female 表示女,寫不寫 0 或者 1 沒區別,因為判斷的時候,就用 j 裡面的 gender 是否等於 Gender 裡面的值

就是把我們的一些固定選項都給列出來,單獨放一個類裡面,然後使用

擴展

類型別名:

假如我們需要倆個變數 ,他們倆的類型是一樣的,特別長

以上就是我們常見的類型,所以一定要反覆的去看,去練熟

好了,想瞭解更多有趣知識那就關註六扇老師抖音號吧

抖音搜索 六扇有伊人 或者 直接點擊

個人博客鏈接:http://blog.qianbaiyv.cn/get/my/blog/details/2311887075%40qq.com/148

轉載請標明

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引子 在使用events_statements_current的過程中發現,同一線程在同一時刻,可能有多條記錄,與直觀感覺不太一樣,於是跟蹤了一下內部實現,有了本文。 STATEMENT STACK的定義 STATEMENT STACK 是events_statements_current表被後用於 ...
  • 對於開發人員而言,資料庫的增刪改查操作才是最常使用的功能,學習 MongoDB 時還需對這些功能熟記於心才行啊。我就在這裡做一個簡單的備忘,多看官方文檔才是正道。 ...
  • 1.從官網下載 官網下載對應版本 https://www.elastic.co/cn/downloads/past-releases#kibana 2.解壓縮 tar -xvf kibana-7.15.2-linux-x86_64.tar.gz 3.修改配置文件 server.port: 5601 ...
  • 如今,視頻正在以一種前所未有的方式滲入日常生活,是當下人們記錄生活最熱門的方式。所以,用戶對視頻的畫質要求越來越高,App想要吸引更多的用戶,擁有視頻畫質新技術的強力支撐很關鍵。 HDR(High-Dynamic Range)就是一種提高影像亮度和對比度的處理技術。它可以將每個暗部的細節變亮,增加對 ...
  • 關於Intent.setDataAndType參數問題 install取設置屬於和類型,數據就是獲取到的uri,更具文件類型不同,type參數也不相同,具體參考下表 {尾碼名,MIME類型} ​ {".3gp", "video/3gpp"}, ​ {".apk", "application/vnd. ...
  • android studio 升級 Android Studio Dolphin | 2021.3.1 Patch 1後,xml佈局預覽界面報錯 一開始以為是那些警告導致的,有很多黃色的xml警告,比如命名的名字不是英文,或者設置了各種顏色值警告,或者系統要求你添加 contentDescripti ...
  • 滑動衝突 有時候 viewpager 嵌套 webview 後,左右滑動衝突,直接消費或者處理攔截導致上下不能滑動,所以需要根據滑動情況判斷處理,只在上下滑動時判斷事件交給子view class ScrollWebView(context: Context, attrs: AttributeSet) ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 場景 在App中撥打電話是一個比較常見的應用場景,但是我們通過搜索文章,發現,大部分的博文都是uni-app官網的copy, copy uni-app 提供的打電話,只是幫你把撥號界面呼出來,並不能直接撥打, 安卓原生API可以,IOS因 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...