【TypeScript】基礎:數據類型

文章目錄

    • TypeScript
      • 一、簡介
      • 二、類型聲明
      • 三、數據類型
          • any
          • unknown
          • nerver
          • void
          • object
          • tuple
          • enum
          • Type
          • 一些特殊情況

TypeScript

是JavaScript的超集,代碼量比JavaScript復雜、繁多;但是結構更清晰

一、簡介

為什么需要TypeScript?

JavaScript的困擾

  1. 不清楚的數據類型
  2. 不會指明代碼的邏輯漏洞
  3. 訪問不存在的屬性
  4. 低級的拼寫錯誤

Typescript會進行靜態類型檢查:在代碼運行前對代碼進行檢查標紅;將代碼錯誤前置

如何編譯TypeScript?

要將.ts編譯成.js文件;需要配置TypeScript的編譯環境

  1. 全局安裝TypeScript:npm i TypeScript -g

  2. 初始化:tsc --init

    生成一個編譯控制文件tsconfig.json

  3. 監視ts文件:tsc --watch index.ts

    會生成一個對應的js文件,一有變化就會更新;并生成一個配置文件tsconfig.json

  4. 修改配置文件:取消注釋 noEmitOnError:true

    只要ts文件語法正確的時候才會更新ts

二、類型聲明

聲明變量時,需要對其進行類型聲明;使用:來進行類型聲明

let a: string // a是字符串變量,只能賦值字符串(官方推薦小寫)
let b: String // 字符串對應的包裝對象
function sum(a: number, b: number): number {return a + b
} //sum函數的參數必須的number,返回值也必須是number

三、數據類型

any

任意類型,意味著放棄類型檢查;即可以存任意類型的值,也可以賦值給任意類型的變量

unknown

未知類型,類型安全的any,但是不能將unknown數據類型賦給其他類型

若要將unknown賦值給其他類型,可以這么做:

let a: unknown
a = "hello"
let b: string
b = a as string
let str:unknown
str = "world"
str.toUppercase() //有警告
(str as string).toUppercase() //無警告
nerver

不是任何值;我們一般不用,不然聲明的變量將無用。一般是TypeScript主動推斷出來的,或者是特殊的函數(不需要任何返回值)

void

通常用于函數返回值的類型聲明;這個類型是,函數返回值為空(undefined),且不依賴函數返回值進行任何操作。

function fn():undefined{ ... } 
let result1 = fn() // 編碼者可以利用函數的返回值
function fn():void{ ... } 
let result2 = fn() // 編碼者不可以利用函數的返回值
object

object(小寫):非原始數據類型

Object(大寫):可以調用到Object方法的類型;通俗講,除了null和undefined都可以。

  1. 聲明對象類型
  let person: { name: string, age?: number, [key: string]: any }//age?表示可選,// [key: string]: any 表示索引簽名,任意數量的屬性;key是any類型,value是string類型。
  1. 聲明函數類型
  let sum: (a: number, b: number) => number //指明傳入的參數類型number,返回類型也為numbersum = function (x, y) {return x + y}
  1. 聲明數組類型
  let arr1:srtring[] //字符串數組let arr2:Array<string> //數字數組
tuple

元組類型 -> 特殊的數組類型。元素固定數量,可以是不同類型

!注意:元組不是關鍵字

let arr1 = [number,string] //兩個元素,一個數字,一個字符串
let arr2 = [number,...[string]] //一個數字和任意個string
enum

枚舉類型,定義一組命名常量;增強可讀性,可維護性,程序員編寫代碼時不容易出錯

  1. 數字枚舉
  enum Direction{ Up, Down, Left, Right }function walk(data:Direction){ //使用例子if(data === Direction.Up){console.log("向【上】走");}else if(data === Direction.Down){console.log("向【下】走")}else if(data === Direction.Left){console.log("向【左】走")}else if(data === Direction.Right){console.log("向【右】走")}}
  1. 字符串枚舉
  enum Direction{Up = "up",Down = "down",Left = "left",Right = "right"}
  1. 常量枚舉

使用const關鍵字定義,在編譯時內聯,避免產生額外的代碼

:那么何為內聯?

在TypeScript編譯時,將成員引用替換成實際值,不生成額外枚舉對象,減少Javascript代碼量,提高運行速度。

Type

為任意數據類型創建別名;一般開頭用大寫

  1. 創建別名

    type num = number // num是數字類型
    
  2. 聯合類型(高級類型)

    type Status = number|string //Status是數字或字符串類型
    type Gender = "男"|"女" //Gender是字符"男"or"女"
    
  3. 交叉類型

    type Area = {height : number;width : number;speak():void;
    };
    
一些特殊情況

!當使用類型聲明限制函數的返回值為空時,TypeScript并不會嚴格限制函數的返回值為空!

補充 數組方法map(),find()都是有返回值的操作;而forEach()是單純遍歷數組,沒有返回值

type LogFunc = () => viod
const fn:LogFunc = () => {return 100 //允許返回非空值
}

為什么如此呢?就是為了兼容以下代碼:

let src = [1, 2, 3]
const dst = [0]
src.forEach((e1) => dst.push(e1)) //forEach本身沒有返回值,但是由于如果箭頭函數只有一段代碼可以不加{},如果嚴格限制返回值必須為空的話,這樣寫就會不合法,所以提前用限制函數為void的話,不是嚴格要求返回值必須是空

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

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

相關文章

C++模板編程——可變參函數模板

目錄 1. 可變參函數模板基本介紹 2. 參數包展開——通過遞歸函數 3. 參數包展開——通過編譯期間if語句(constexpr if) 4. 重載 5. 后記 進來看的小伙伴們應該對C中的模板有了一定了解&#xff0c;下面給大家介紹一下可變參函數模板。過于基礎的概念將不仔細介紹。 1. 可變…

ChatGPT-4o和ChatGPT-4o mini的差異點

在人工智能領域&#xff0c;OpenAI再次引領創新潮流&#xff0c;近日正式發布了其最新模型——ChatGPT-4o及其經濟實惠的小型版本ChatGPT-4o Mini。這兩款模型雖同屬于ChatGPT系列&#xff0c;但在性能、應用場景及成本上展現出顯著的差異。本文將通過圖文并茂的方式&#xff0…

三數之和(15)

15. 三數之和 - 力扣&#xff08;LeetCode&#xff09; 可以一起總結的題目&#xff1a;三角形的最大周長&#xff08;976&#xff09;-CSDN博客 解法&#xff1a; class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector…

2025最新源支付V7全套開源版+Mac云端+五合一云端

2025最新源支付V7全套開源版Mac云端五合一云端 官方1999元&#xff0c; 最新非網上那種功能不全帶BUG開源版&#xff0c;可以自己增加授權或二開 擁有卓越的性能和豐富的功能。它采用全新輕量化的界面UI&#xff0c;讓您能更方便快捷地解決知識付費和運營贊助的難題 它基于…

9 點結構模塊(point.rs)

一、point.rs源碼 use super::UnknownUnit; use crate::approxeq::ApproxEq; use crate::approxord::{max, min}; use crate::length::Length; use crate::num::*; use crate::scale::Scale; use crate::size::{Size2D, Size3D}; use crate::vector::{vec2, vec3, Vector2D, V…

數據分析系列--[12] RapidMiner辨別分析(含數據集)

一、數據準備 二、導入數據 三、數據預處理 四、建模辨別分析 五、導入測試集進行辨別分析 一、數據準備 點擊下載數據集 二、導入數據 三、數據預處理 四、建模辨別分析 五、導入測試集進行辨別分析 Ending, congratulations, youre done.

Day33【AI思考】-函數求導過程 的優質工具和網站

文章目錄 **函數求導過程** 的優質工具和網站**一、動態圖形工具**1. **Desmos&#xff08;網頁端&#xff09;**2. **GeoGebra&#xff08;全平臺&#xff09;** **二、分步推導工具**3. **Wolfram Alpha&#xff08;網頁/App&#xff09;**4. **Symbolab&#xff08;網頁/App…

個人筆記(很沒營養,純備忘錄)

1.輸入電阻和輸出電阻指在一個可劃分為3部分的電路中&#xff0c;中間部分電路相當于前面電路的負載有輸入端電阻&#xff0c;稱輸入電阻&#xff0c;相對于后面部分等效為電源有輸出端內阻&#xff0c;稱輸出電阻 理所當然的希望輸出電阻對負載影響小&#xff0c;輸入電阻能完…

當卷積神經網絡遇上AI編譯器:TVM自動調優深度解析

從銅線到指令&#xff1a;硬件如何"消化"卷積 在深度學習的世界里&#xff0c;卷積層就像人體中的毛細血管——數量龐大且至關重要。但鮮有人知&#xff0c;一個簡單的3x3卷積在CPU上的執行路徑&#xff0c;堪比北京地鐵線路圖般復雜。 卷積的數學本質 對于輸入張…

51單片機 02 獨立按鍵

一、獨立按鍵控制LED亮滅 輕觸按鍵&#xff1a;相當于是一種電子開關&#xff0c;按下時開關接通&#xff0c;松開時開關斷開&#xff0c;實現原理是通過輕觸按鍵內部的金屬彈片受力彈動來實現接通和斷開。 #include <STC89C5xRC.H> void main() { // P20xFE;while(1){…

系統URL整合系列視頻二(界面原型)

視頻 系統URL整合系列視頻二&#xff08;界面原型&#xff09; 視頻介紹 &#xff08;全國&#xff09;大型分布式系統Web資源URL整合需求界面原型講解。當今社會各行各業對軟件系統的web資源訪問權限控制越來越嚴格&#xff0c;控制粒度也越來越細。安全級別提高的同時也增加…

vscode命令面板輸入 CMake:build不執行提示輸入

CMake&#xff1a;build或rebuild不編譯了&#xff0c;彈出:> [Add a new preset] , 提示輸入發現settings.jsons設置有問題 { "workbench.colorTheme": "Default Light", "cmake.pinnedCommands": [ "workbench.action.tasks.configu…

wax到底是什么意思

在很久很久以前&#xff0c;人類還沒有誕生文字之前&#xff0c;人類就產生了語言&#xff1b;在誕生文字之前&#xff0c;人類就已經使用了語言很久很久。 沒有文字之前&#xff0c;人們的語言其實是相對比較簡單的&#xff0c;因為人類的生產和生活水平非常低下&#xff0c;…

SSRF 漏洞利用 Redis 實戰全解析:原理、攻擊與防范

目錄 前言 SSRF 漏洞深度剖析 Redis&#xff1a;強大的內存數據庫 Redis 產生漏洞的原因 SSRF 漏洞利用 Redis 實戰步驟 準備環境 下載安裝 Redis 配置漏洞環境 啟動 Redis 攻擊機遠程連接 Redis 利用 Redis 寫 Webshell 防范措施 前言 在網絡安全領域&#xff0…

【周易哲學】生辰八字入門講解(八)

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一個正在變禿、變強的文藝傾年。 &#x1f514;本文講解【周易哲學】生辰八字入門講解&#xff0c;期待與你一同探索、學習、進步&#xff0c;一起卷起來叭&#xff01; 目錄 一、六親女命六親星六親宮位相互關系 男命六親星…

CAN總線數據采集與分析

CAN總線數據采集與分析 目錄 CAN總線數據采集與分析1. 引言2. 數據采集2.1 數據采集簡介2.2 數據采集實現3. 數據分析3.1 數據分析簡介3.2 數據分析實現4. 數據可視化4.1 數據可視化簡介4.2 數據可視化實現5. 案例說明5.1 案例1:數據采集實現5.2 案例2:數據分析實現5.3 案例3…

【c++】類與對象詳解

目錄 面向過程思想和面向對象思想類的定義引入類的關鍵字類定義的兩種方式類的訪問限定符類的作用域類大小的計算封裝 this指針類的6個默認成員函數構造函數初步理解構造函數深入理解構造函數初始化列表單參數構造函數引發的隱式類型轉換 析構函數拷貝構造函數賦值運算符重載運…

大模型訓練(5):Zero Redundancy Optimizer(ZeRO零冗余優化器)

0 英文縮寫 Large Language Model&#xff08;LLM&#xff09;大型語言模型Data Parallelism&#xff08;DP&#xff09;數據并行Distributed Data Parallelism&#xff08;DDP&#xff09;分布式數據并行Zero Redundancy Optimizer&#xff08;ZeRO&#xff09;零冗余優化器 …

陸游的《詩人苦學說》:從藻繪到“功夫在詩外”(中英雙語)mastery lies beyond poetry

陸游的《詩人苦學說》&#xff1a;從藻繪到“功夫在詩外” 今天看萬維鋼的《萬萬沒想到》一書&#xff0c;看到陸游的功夫在詩外的句子&#xff0c;特意去查找這首詩的原文。故而有此文。 我國學人還往往過分強調“功夫在詩外”這句陸游的名言&#xff0c;認為提升綜合素質是一…

DeepSeek-R1 低成本訓練的根本原因是?

在人工智能領域&#xff0c;大語言模型&#xff08;LLM&#xff09;正以前所未有的速度發展&#xff0c;驅動著自然語言處理、內容生成、智能客服等眾多應用的革新。然而&#xff0c;高性能的背后往往是高昂的訓練成本&#xff0c;動輒數百萬美元的投入讓許多企業和研究機構望而…