TypeScript學習筆記歸納(持續更新ing)

文章目錄

前言

二、TypeScript的優勢體現在哪里?

1、執行時間上的區別

2、基礎數據類型區別

3、TS優勢

三、TypeScript的關鍵特性

四、TypeScript的類型系統

1、什么是類型注釋?

2、類型系統核心 - 常用類型

1)?基本類型(原始類型):? ??

數字(Number)?

字符串(String)

布爾值(Boolean)

Null 和 Undefined?

Symbol

疑問

1、--strictNullChecks標志是什么?

2、--strictNullChecks標志默認是啟動的嗎?如何關閉

總結


前言

提示:該文章主要記錄一下TypeScript學習筆記及使用體驗,會不斷豐富更新學習及使用過程中遇到的情況:


一、TypeScript是什么?

TypeScript 是一種由 Microsoft 開發的開源語言。TypeScript與JavaScript有著不同尋常的關系。它是 JavaScript 的一個超集,添加了可選的靜態類型和基于類的面向對象編程。 TypeScript 提供了JavaScript的所有功能,并且額外增加了:類型系統
簡單可以概述為:
TypeScript(簡稱:TS)是 JavaScript(簡稱:JS)的超集(JS 有的 TS 都有);
TypeScript =
Type + JavaScript(在 JS 基礎之上,為 JS 添加了類型支持);
?

二、TypeScript的優勢體現在哪里?

1、JS 代碼中絕大部分錯誤都是 類型 錯誤(Uncaught Type Error);
2、在VSCode中,會先編譯代碼,后執行代碼;

1、執行時間上的區別

在我們使用VSCode開發過程中不難發現,JS 屬于動態類型的編程語言,是在執行期對代碼做類型檢查,這樣開發過程中就需要等到代碼真正去執行的時候才能發現錯誤,這時候再去定位并修改bug,相對來說就有點晚了,還會耽誤很多時間。

然而經過學習使用會發現,TS屬于靜態類型的編程語言,是在編譯期做類型檢查,這時在代碼編譯的時候(代碼執行前)就會發現錯誤,這樣可以在編寫代碼的同時就發現代碼中的錯誤,它可以高亮代碼中的意外行為,從而降低出現錯誤的可能性。

2、基礎數據類型區別

TS 中包含了JS中所有的數據類型,同時新增了特定類型,在TS中常用基礎類型可細分為兩類:

JS基礎數據類型(TS包含):

  • 原始類型:number/string/boolean/null/undefined/symbol;
  • 對象類型:object(包括,數組、對象、函數等對象);
? TS新增數據類型
  • 聯合類型、自定義類型(類型別名)、接口、元組、字面量類型、枚舉、void、any 等。

3、TS優勢

  • 所有的 JS 代碼都是 TS 代碼;
  • 開發過程中任何位置的代碼都會有相應的 代碼提示 ,增強了開發體驗;
  • 可在代碼編寫時 顯示標記出代碼中的意外行為 降低出現錯誤的可能性 ,提升開發效率;
  • 豐富的 類型系統 提升了代碼的可維護性,使得 重構代碼更加容易
  • 類型推斷 機制, 不需要 在代碼中的 每個地方都顯示標注類型
  • 支持 最新的 ECMAScript 語法
  • 支持 多種框架的使用;

三、TypeScript的關鍵特性

以下是一些 TS?的關鍵特性:

  • 靜態類型檢查:在代碼運行之前,TS編譯器會檢查類型錯誤。這有助于在早期發現潛在的問題。
  • 類型推斷TS 能夠根據上下文自動推斷變量的類型,減少了必須顯式聲明類型的情況。
  • 類型注解:可以在變量、函數參數和函數返回值上添加類型注解,以明確它們的類型。
  • 接口和類TS支持面向對象編程的特性,如類、接口和繼承。
  • 枚舉類型TS提供了枚舉類型,這在 JS 中是沒有的,可以用來定義一組命名常量。
  • 泛型:泛型允許用戶創建可重用的組件,這些組件可以支持多種類型而不會丟失其原有類型。
  • 模塊化TS 支持模塊,可以幫助組織和維護大型代碼庫。
  • 工具支持TS有很好的編輯器支持,比如自動完成、導航到定義和重構支持。

四、TypeScript的類型系統

TS的類型系統是該語言的核心特性之一,它在 JS的基礎上添加了類型注釋和靜態類型檢查。這意味著你可以在編碼階段指定變量、函數參數和返回值的類型,這樣 TS 編譯器就可以在代碼運行之前檢測到潛在的類型錯誤。

1、什么是類型注釋?

在TS中,類型注釋是一種輕量級的方式來記錄函數或變量的期望類型。類型注釋可以幫助開發者理解代碼應如何使用,同時也允許TS編譯器檢查類型錯誤。

類型注釋通常跟在變量名后面,使用冒號和空格分隔,然后是類型名稱。下面是一些基本的類型注釋示例:

作用:為變量添加類型約束。比如,上述例子中:
name?是一個類型為?string?的變量;
age?是一個類型為?number?的變量;
isActive?是一個類型為?boolean?的變量;
函數?greet?接收一個?string?類型的參數,并返回一個?string?類型的值;
對象?user?有兩個屬性,分別為?string?類型的?name?和?number?類型的?age;
數組?numbers?和?names?分別包含?number?類型和?string?類型的元素;
元組?tuple?包含一個?string?類型和一個?number?類型的元素;

??!!!約定了什么類型,就只能給變量賦值該類型的值,否則,就會報錯。

類型注釋不是JS的一部分,它們在TS代碼被編譯成JS時會被移除。這意味著它們不會影響生成的JS代碼的性能。它們的主要目的是在開發階段提供類型校驗和編輯器支持。

2、類型系統核心 - 常用類型

下面是 TS類型系統的一些基本組成部分:

1)?基本類型(原始類型):? ??

在TS中,基本類型(也稱為原始類型)是構建其他類型的基石。下面是TS中的一些基本類型,這些類型,完全按照 JS 中類型的名稱來書寫。?

  • 數字(Number)?

? ? ? ?在TS中,不管是整數還是浮點數,統一使用number類型表示。它還支持十進制、十六進制、二進制和八進制字面量。

// 數字(Number)類型
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
  • 字符串(String)

? ? ? ?字符串數據用于表示文本數據,可以是單引號('), 雙引號(")或模板字符串(``)。TS中的文本數據類型是string

// 字符串(String)
let name: string = "letu";
name = '樂途';
let sentence: string = `Hello, my name is ${ name }.`;
  • 布爾值(Boolean)

? ? ? 布爾值是最基本的數據類型,在TS中,它表示邏輯上的真(true)或假(false)。只有兩個值:truefalse,它通常用于控制條件語句,如if語句。

// 布爾值(Boolean)
let isDone: boolean = false;
isDone = true
  • Null 和 Undefined?

? ? ? ?在TypeScript中,nullundefined是所有類型的子類型。這意味著你可以將nullundefined賦值給像numberstring這樣的類型。但是,當你使用--strictNullChecks標志時,nullundefined只能賦給any和它們各自的類型(這意味著undefined只能賦給undefined類型,null只能賦給null類型)

Undefined:
undefined類型代表未定義的值。在JavaScript中,如果你聲明一個變量但沒有給它賦值,那么它的值就是undefined。在

let notAssigned: undefined; // 變量沒有賦值,只定義了類型為undefined
console.log(notAssigned); // 輸出 "undefined"

TypeScript中,通常不會直接使用undefined類型,因為這限制了變量只能被賦予undefined值。

Null:

null類型表示沒有任何對象值。在JavaScript中,null通常被用來表示一個意料之中的缺失值。

let emptyValue: null; // 變量被賦予null類型
emptyValue = null; // 合法的賦值

undefined一樣,直接使用null類型不是特別有用,因為這樣變量除了null之外不能賦予任何其它值。但是,你可以通過聯合類型來指定一個變量可能是null

當啟用--strictNullChecks時,nullundefined的行為會更加嚴格。任何不顯式包含nullundefined的類型都不能被賦予這些值。

let strictString: string;
strictString = null; // 錯誤,不能將類型“null”分配給類型“string”
strictString = undefined; // 錯誤,不能將類型“undefined”分配給類型“string”
  • Symbol

    symbol類型是ECMAScript 2015的新特性,symbol是不可改變且唯一的。常用來作為對象屬性的鍵。

    let sym1 = Symbol();
    let sym2 = Symbol("key"); // 可選的字符串key
    

    symbol類型的值是通過Symbol構造函數創建的。每個symbol都是唯一的。即使你用相同的字符串來創建兩個symbol,它們也是不相等的。

    let sym3 = Symbol("key");
    let sym4 = Symbol("key");
    console.log(sym3 === sym4); // 輸出 "false"
    

    symbol類型的主要用途之一是作為對象屬性的鍵,這些屬性不會與其他屬性沖突,并且不會被通常的方法(如Object.keysfor...in循環)枚舉到。

    let obj = {[sym1]: "value"
    };
    console.log(obj[sym1]); // "value"
    

     

2. 數組:
? ?- `type[]`: 表示一個元素類型為 `type` 的數組。
? ?- `Array<type>`: 另一種表示數組的方式。

3. 元組:
? ?- `[type1, type2]`: 表示一個已知元素數量和類型的數組,各元素的類型不必相同。

4. 枚舉:
? ?- `enum`: 用于定義一組命名常量。

5. 任意類型:
? ?- `any`: 可以是任何類型,TypeScript 不會對這些變量進行類型檢查。

6. Void:
? ?- 用于表示沒有任何類型,通常用于函數沒有返回值的情況。

7. Never:
? ?- 表示永遠不存在的值的類型,例如,一個拋出異常或永不返回的函數的返回類型。

8. 聯合類型:
? ?- `type1 | type2`: 表示一個值可以是 `type1` 或 `type2`。

9. 交叉類型:
? ?- `type1 & type2`: 表示一個值同時是 `type1` 和 `type2`。

10. 類型別名:
? ? - `type Name = ...`: 創建一個新名字來引用某種類型。

11. 接口:
? ? - `interface`: 定義對象類型,可以包括屬性和方法的類型定義。

12. 泛型:
? ? - 允許在定義函數、接口、類時不預先指定具體的類型,而是在使用時再指定類型的特性。


疑問

1、--strictNullChecks標志是什么?

--strictNullChecks?是 TypeScript 編譯器的一個選項。當這個標志被啟用時,編譯器會更加嚴格地檢查?null?和?undefined?值,以避免可能的運行時錯誤。

在沒有啟用?--strictNullChecks?的情況下,所有類型都隱式地包含?null?和?undefined?值。這意味著如果你有一個類型為?string?的變量,那么它實際上可以被賦予?stringnull?或?undefined?值。

let myString: string;myString = null; // 沒有錯誤,即使在沒有 --strictNullChecks 的情況下
myString = undefined; // 沒有錯誤

然而,當啟用了?--strictNullChecks?后,null?和?undefined?只能賦給它們各自的類型和?any?類型,或者是明確聲明為可選的類型。這樣做可以避免很多常見的錯誤,比如在一個對象上調用方法之前沒有正確地檢查對象是否為?null

let myString: string;myString = null; // 錯誤: Type 'null' is not assignable to type 'string'.
myString = undefined; // 錯誤: Type 'undefined' is not assignable to type 'string'.

如果你想要一個變量既可以是?string?類型也可以是?null?或?undefined,你需要使用聯合類型明確聲明:?

let myString: string | null | undefined;myString = null; // 正確
myString = undefined; // 正確

啟用?--strictNullChecks?是一個很好的實踐,因為它可以幫助開發者在編譯階段捕獲可能的空值錯誤,而不是在代碼運行時才發現

2、--strictNullChecks標志默認是啟動的嗎?如何關閉

截至我知識更新的時間點(2023年),在 TypeScript 中,--strictNullChecks?標志默認是關閉的。如果你創建一個新的 TypeScript 項目,這個選項不會自動啟用;你需要在?tsconfig.json?文件中明確地設置它。


要啟用?--strictNullChecks,你需要在項目的?tsconfig.json?文件中設置?compilerOptions?部分,如下所示:

{"compilerOptions": {"strictNullChecks": true}
}

如果你想要關閉這個標志(假設它已經被啟用),你需要在?tsconfig.json?中將它設置為?false

{"compilerOptions": {"strictNullChecks": false}
}

注意,關閉?--strictNullChecks?可能會使你的代碼更容易出現運行時錯誤,因為你可能會遺漏對?null?和?undefined?的必要檢查。然而,在某些情況下,例如當你遷移舊的 JavaScript 項目到 TypeScript 時,你可能需要暫時關閉這個選項,以便逐步解決類型問題。?


總結

TypeScript是一種由Microsoft開發的開源編程語言,它是JavaScript的一個超集,主要提供了類型系統和對ES6+的支持。TypeScript設計的目的是開發大型應用程序,并且能夠編譯成純JavaScript。下面是TypeScript官方文檔的一些關鍵點總結:

  • 類型系統:TypeScript的核心特性之一是它的類型系統。類型系統允許你在編寫代碼時定義變量、函數參數和對象屬性的類型。這有助于捕捉錯誤,提供代碼自動完成和智能提示等功能。
  • 類型推斷:TypeScript能夠在沒有明確類型注釋的情況下推斷出表達式的類型,這稱為“類型推斷”。
  • 接口:接口是TypeScript的一個重要概念,用于定義對象的形狀,包括它應該包含哪些屬性和方法。
  • 類:TypeScript支持基于類的面向對象編程。你可以創建類、繼承和實現接口,這些都是靜態類型檢查的。
  • 泛型:泛型允許你創建可重用的組件,這些組件可以支持多種類型而不會丟失其原始類型。
  • 枚舉:枚舉是一種特殊的類型,它允許你定義一組命名的常量。
  • 模塊:TypeScript支持模塊,這意味著你可以將代碼分割成可重用的模塊。
  • 命名空間:命名空間是另一種在TypeScript中組織代碼的方法,它們可以幫助你防止全局作用域的污染。
  • 裝飾器:裝飾器是一種特殊類型的聲明,它可以被附加到類聲明、方法、訪問器、屬性或參數上。裝飾器使用`@expression`這種形式,`expression`必須求值為一個函數,它會在運行時被調用。
  • 工具鏈:TypeScript提供了一系列工具,包括編譯器`tsc`和語言服務,它們可以幫助你編譯、檢查和重構TypeScript代碼。
  • 編譯器選項:TypeScript編譯器`tsconfig.json`文件中有許多配置選項,允許你定制編譯過程。
  • 與JavaScript的互操作性**:TypeScript旨在與現有的JavaScript代碼庫和框架兼容。你可以在TypeScript項目中使用JavaScript代碼,并且可以逐步遷移JavaScript代碼到TypeScript。

TypeScript官方文檔包含了從基礎到高級的所有概念,還有關于如何使用TypeScript的詳細指南,以及如何配置和管理TypeScript項目的信息。這些文檔是學習和使用TypeScript的重要資源。

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

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

相關文章

組態王 6.55 啟停plc_永宏PLC在遠程控制系統中的應用

一、行業介紹本遠程控制系統是給石藥集團的下屬子公司設計的一個控制方案。主要是配套GPRS-DTU產品實現遠程plc與plc之間的數據共享。從而達到遠程無線數據寫入控制和讀取監控的目的。二、客戶需求(1) 客戶可以在監控室控制至少2-3公里外的井上兩個水泵的啟動和停止。(2) 客戶可…

Vue表格中,對數據進行轉換、處理

眾所周知&#xff0c;后端從Mysql取出的數據&#xff0c;一般是很難單獨處理某一個Key的數據的&#xff08;需要處理的話&#xff0c;可能會浪費大量的性能。而且對頁面加載時間有很大的影響&#xff09;&#xff0c;所以&#xff0c;從數據庫取出的數據。只能由前端進行處理。…

Java應用程序中的SQL注入

在本文中&#xff0c;我們將討論什么是SQL注入攻擊。 以及它如何影響任何Web應用程序使用后端數據庫。 在這里&#xff0c;我專注于Java Web應用程序。 開放Web應用程序安全項目&#xff08;OWAP&#xff09;列出了SQL注入是Web應用程序的主要漏洞攻擊。 黑客將Web請求中的SQL代…

【轉】ReactNativeweexDeviceOne對比

React Native出來有一段時間了&#xff0c;國內的weex和deviceone是近期發布的&#xff0c;我可以說從2011年就開始關注快速開發的跨平臺平臺技術了&#xff0c;接觸過phoneGap、數字天堂、appcan等早期的移動中間件技術&#xff0c;也跟朋友也討論過這類的輕量級框架。這些年通…

bluetooth射頻已關閉請打開bluetooth射頻_希杰大功率射頻放大器燒了維修診斷步驟...

如果電阻值過低&#xff0c;說明電源內部存在短路&#xff0c;正常時其阻值應能達到100千歐以上;電容器應能夠充放電&#xff0c;如果損壞&#xff0c;則表現為AC電源線兩端阻值低&#xff0c;呈短路狀態&#xff0c;否則可能是開關管擊穿。然后檢查直流輸出部分脫開負載&#…

java中整數如何表示,在Java中如何在位級別上內部表示整數?

慕瓜9086354Java整數為32位&#xff0c;并且總是帶符號的。這意味著&#xff0c;最高有效位(MSB)用作符號位。用an表示的整數int不過是位的加權和。權重分配如下&#xff1a;Bit# Weight31 -2^3130 2^3029 2^29... ...2 2^21 2^10 …

洛谷-P1160 隊列安排

題目 Problem Description 一個學校里老師要將班上N個同學排成一列&#xff0c;同學被編號為1&#xff5e;N&#xff0c;他采取如下的方法&#xff1a; 1.先將1號同學安排進隊列&#xff0c;這時隊列中只有他一個人&#xff1b; 2.2&#xff5e;N號同學依次入列&#xff0c;編號…

1.HTML小結

HTML 基本文檔 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>文檔標題</title> </head> <body> 可見文本... </body> </html> <!DOCTYPE html>html文件聲明。charset"UTF-8…

方法參數名稱和Spring

繼續之前的博客文章有關構造函數和方法參數以及Java在運行時不保留參數名稱的情況–先前的文章涉及構造函數不保留參數名稱及其對Spring中的Contructor注入的含義&#xff0c;在此我將介紹更多內容不保留參數名稱的情況對Spring有影響&#xff1a; 1.考慮帶參數的Spring MVC C…

Fragment Or DialogFragment Can not perform this action after onSaveInstanceState

轉載&#xff1a;http://blog.csdn.net/chenshufei2/article/details/48747149 public void show(FragmentManager manager, String tag) {mDismissed false;mShownByMe true;FragmentTransaction ft manager.beginTransaction();ft.add(this, tag);ft.commit(); //注意這里…

php延遲更新,ThinkPHP開發指南-模型-高級模型之延遲更新

導航&#xff1a;上一頁我們經常需要給某些數據表添加一些需要經常更新的統計字段&#xff0c;例如用戶的積分、文件的下載次數等等&#xff0c;而當這些數據更新的頻率比較頻繁的時候&#xff0c;數據庫的壓力也隨之增大不少&#xff0c;我們可以利用高級模型的延遲更新功能緩…

three.js制作3d模型工具_3D打印模型打磨拋光常用工具

對于追求更好模型品質的人來說&#xff0c;對3D打印模型進行后處理工作是必不可少的&#xff0c;而后處理&#xff0c;首要的便是對模型進行打磨、拋光&#xff0c;將不屬于模型的耗材去除&#xff0c;提高表面光潔度。在此工作中&#xff0c;我們需要用到很多工具&#xff0c;…

Linux中文檔去掉windows文本的多余的回車符(^M)

1) 使用sed 去掉windows下的回車符 &#xff08;注意^M 在linux 下寫法 按^M 是回車換行符,輸入方法是按住CTRLv,松開v,按m)sed -i s/^M//g filename 2) 在vim下類似 :%s/^M//g &#xff08;^M輸入方法和上面方法相同&#xff09; 3) 使用dos2unix dos2unix filename 個人覺得第…

為何要清除浮動?如何清除?

原因&#xff1a; 元素設置了float屬性后&#xff0c;就會脫離文檔流&#xff0c;當 包含框 的高度小于 浮動框 的時候&#xff0c;會出現高度塌陷。因此才需要清除浮動&#xff01; 表現如圖&#xff1a;包括框container已經包不住float的圖片了&#xff01; 清除浮動方法&a…

Spring MVC錯誤處理示例

這篇文章描述了在Spring MVC 3中執行錯誤處理的不同技術。該代碼在GitHub上的Spring-MVC-Error-Handling目錄中可用。 它基于帶有注釋的Spring MVC示例。 在Spring 3之前處理異常 在Spring 3之前&#xff0c;使用HandlerExceptionResolvers處理異常。 此接口定義一個方法&…

PLSQL 學習之路(1)創建用戶,表空間,表,數據

1.用SYS用戶登錄PL/SQL SYSXE as SYSDBA 2.創建表空間 create tablespace Mars datafile F:\oracle\Mars.dbf size 500M autoextend on next 100M maxsize unlimited logging extent management local autoallocate segment space management auto; 3.創建用戶 create user Mar…

php數字取反,[轉+自]關于PHP7的新特性(涉及取反和disabled_functions繞過)

PHP7和PHP5上的安全區別preg_replace()不再支持/e修飾符利用\e修飾符執行代碼的后門大家也用了不少了&#xff0c;具體看官方的這段描述:如果設置了這個被棄用的修飾符&#xff0c; preg_replace() 在進行了對替換字符串的 后向引用替換之后, 將替換后的字符串作為php 代碼評估…

如何關閉蘋果手機自動扣費_教你關閉蘋果手機系統的自動更新功能,舊手機還能再用幾年!...

大家都知道&#xff0c;蘋果手機在更新幾個大版本后&#xff0c;手機不是變得非常卡&#xff0c;就是非常的耗電&#xff0c;大大的縮短了手機的使用壽命。所以&#xff0c;許多人都不會選擇更新系統&#xff0c;但是手機只要連上WiFi并且在充電狀態&#xff0c;就會在半夜自動…

meta標簽的常見用法

一、定義和用法 <meta> 標簽始終位于 head 元素中。<meta> 元素可提供有關頁面的元信息&#xff08;meta-information&#xff09;&#xff0c;元數據不會顯示在頁面上&#xff0c;但是對于機器是可讀的。比如針對搜索引擎和更新頻度的描述和關鍵詞。 元數據&…

HttpClient的使用

新引入Hutool-HttpUtil的使用&#xff08;更簡單&#xff0c;更強大&#xff01;&#xff09;&#xff0c;詳見&#xff1a;http://www.cnblogs.com/jiangbei/p/7667858.html 一、概述 1.簡介 根據凡技術必登其官網的原則&#xff08;如果有&#xff09;&#xff0c;我們可以先…