TS學習——快速入門

TypeScript簡介

  1. TypeScript是JavaScript的超集。
  2. 它對JS進行了擴展,向JS中引入了類型的概念,并添加了許多新的特性。
  3. TS代碼需要通過編譯器編譯為JS,然后再交由JS解析器執行。
  4. TS完全兼容JS,換言之,任何的JS代碼都可以直接當成JS使用。
  5. 相較于JS而言,TS擁有了靜態類型,更加嚴格的語法,更強大的功能;TS可以在代碼執行前就完成代碼的檢查,減小了運行時異常的出現的幾率;TS代碼可以編譯為任意版本的JS代碼,可有效解決不同JS運行環境的兼容問題;同樣的功能,TS的代碼量要大于JS,但由于TS的代碼結構更加清晰,變量類型更加明確,在后期代碼的維護中TS卻遠遠勝于JS。

1、TypeScript 開發環境搭建

  1. 下載Node.js

    • 64位:https://nodejs.org/dist/v14.15.1/node-v14.15.1-x64.msi
    • 32位:https://nodejs.org/dist/v14.15.1/node-v14.15.1-x86.msi
  2. 安裝Node.js

  3. 使用npm全局安裝typescript

    • 進入命令行
    • 輸入:npm i -g typescript
  4. 創建一個ts文件

  5. 使用tsc對ts文件進行編譯

    • 進入命令行

    • 進入ts文件所在目錄

    • 執行命令:tsc xxx.ts

2、基本類型

  • 類型聲明

    • 類型聲明是TS非常重要的一個特點

    • 通過類型聲明可以指定TS中變量(參數、形參)的類型

    • 指定類型后,當為變量賦值時,TS編譯器會自動檢查值是否符合類型聲明,符合則賦值,否則報錯

    • 簡而言之,類型聲明給變量設置了類型,使得變量只能存儲某種類型的值

    • 語法:

      • let 變量: 類型;let 變量: 類型 =;function fn(參數: 類型, 參數: 類型): 類型{...
        }
        
  • 自動類型判斷

    • TS擁有自動的類型判斷機制
    • 當對變量的聲明和賦值是同時進行的,TS編譯器會自動判斷變量的類型
    • 所以如果你的變量的聲明和賦值時同時進行的,可以省略掉類型聲明
  • 類型:

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

    • let decimal: number = 6;
      let hex: number = 0xf00d;
      let binary: number = 0b1010;
      let octal: number = 0o744;
      let big: bigint = 100n;
      
  • boolean

    • let isDone: boolean = false;
      
  • string

    • let color: string = "blue";
      color = 'red';let fullName: string = `Bob Bobbington`;
      let age: number = 37;
      let sentence: string = `Hello, my name is ${fullName}.I'll be ${age + 1} years old next month.`;
      
  • 字面量

    • 也可以使用字面量去指定變量的類型,通過字面量可以確定變量的取值范圍

    • let color: 'red' | 'blue' | 'black';
      let num: 1 | 2 | 3 | 4 | 5;
      
  • any

    • let d: any = 4;
      d = 'hello';
      d = true;
      
  • unknown

    • let notSure: unknown = 4;
      notSure = 'hello';
      
  • void

    • let unusable: void = undefined;
      
  • never

    • function error(message: string): never {throw new Error(message);
      }
      
  • object(沒啥用)

    • let obj: object = {};
      
  • array

    • let list: number[] = [1, 2, 3];
      let list: Array<number> = [1, 2, 3];
      
  • tuple

    • let x: [string, number];
      x = ["hello", 10]; 
      
  • enum

    • enum Color {Red,Green,Blue,
      }
      let c: Color = Color.Green;enum Color {Red = 1,Green,Blue,
      }
      let c: Color = Color.Green;enum Color {Red = 1,Green = 2,Blue = 4,
      }
      let c: Color = Color.Green;
      
  • 類型斷言

    • 有些情況下,變量的類型對于我們來說是很明確,但是TS編譯器卻并不清楚,此時,可以通過類型斷言來告訴編譯器變量的類型,斷言有兩種形式:

      • 第一種

        • let someValue: unknown = "this is a string";
          let strLength: number = (someValue as string).length;
          
      • 第二種

        • let someValue: unknown = "this is a string";
          let strLength: number = (<string>someValue).length;
          

3、編譯選項

  • 自動編譯文件

    • 編譯文件時,使用 -w 指令后,TS編譯器會自動監視文件的變化,并在文件發生變化時對文件進行重新編譯。

    • 示例:

      • tsc xxx.ts -w
        
  • 自動編譯整個項目

    • 如果直接使用tsc指令,則可以自動將當前項目下的所有ts文件編譯為js文件。

    • 但是能直接使用tsc命令的前提時,要先在項目根目錄下創建一個ts的配置文件 tsconfig.json

    • tsconfig.json是一個JSON文件,添加配置文件后,只需只需 tsc 命令即可完成對整個項目的編譯

    • 配置選項:

      • include

        • 定義希望被編譯文件所在的目錄

        • 默認值:[“**/*”]

        • 示例:

          • "include":["src/**/*", "tests/**/*"]
            
          • 上述示例中,所有src目錄和tests目錄下的文件都會被編譯

      • exclude

        • 定義需要排除在外的目錄

        • 默認值:[“node_modules”, “bower_components”, “jspm_packages”]

        • 示例:

          • "exclude": ["./src/hello/**/*"]
            
          • 上述示例中,src下hello目錄下的文件都不會被編譯

      • extends

        • 定義被繼承的配置文件

        • 示例:

          • "extends": "./configs/base"
            
          • 上述示例中,當前配置文件中會自動包含config目錄下base.json中的所有配置信息

      • files

        • 指定被編譯文件的列表,只有需要編譯的文件少時才會用到

        • 示例:

          • "files": ["core.ts","sys.ts","types.ts","scanner.ts","parser.ts","utilities.ts","binder.ts","checker.ts","tsc.ts"]
            
          • 列表中的文件都會被TS編譯器所編譯

        • compilerOptions

          • 編譯選項是配置文件中非常重要也比較復雜的配置選項

          • 在compilerOptions中包含多個子選項,用來完成對編譯的配置

            • 項目選項

              • target

                • 設置ts代碼編譯的目標版本

                • 可選值:

                  • ES3(默認)、ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext
                • 示例:

                  • "compilerOptions": {"target": "ES6"
                    }
                    
                  • 如上設置,我們所編寫的ts代碼將會被編譯為ES6版本的js代碼

              • lib

                • 指定代碼運行時所包含的庫(宿主環境)

                • 可選值:

                  • ES5、ES6/ES2015、ES7/ES2016、ES2017、ES2018、ES2019、ES2020、ESNext、DOM、WebWorker、ScriptHost …
                • 示例:

                  • "compilerOptions": {"target": "ES6","lib": ["ES6", "DOM"],"outDir": "dist","outFile": "dist/aa.js"
                    }
                    
              • module

                • 設置編譯后代碼使用的模塊化系統

                • 可選值:

                  • CommonJS、UMD、AMD、System、ES2020、ESNext、None
                • 示例:

                  • "compilerOptions": {"module": "CommonJS"
                    }
                    
              • outDir

                • 編譯后文件的所在目錄

                • 默認情況下,編譯后的js文件會和ts文件位于相同的目錄,設置outDir后可以改變編譯后文件的位置

                • 示例:

                  • "compilerOptions": {"outDir": "dist"
                    }
                    
                  • 設置后編譯后的js文件將會生成到dist目錄

              • outFile

                • 將所有的文件編譯為一個js文件

                • 默認會將所有的編寫在全局作用域中的代碼合并為一個js文件,如果module制定了None、System或AMD則會將模塊一起合并到文件之中

                • 示例:

                  • "compilerOptions": {"outFile": "dist/app.js"
                    }
                    
              • rootDir

                • 指定代碼的根目錄,默認情況下編譯后文件的目錄結構會以最長的公共目錄為根目錄,通過rootDir可以手動指定根目錄

                • 示例:

                  • "compilerOptions": {"rootDir": "./src"
                    }
                    
              • allowJs

                • 是否對js文件編譯
              • checkJs

                • 是否對js文件進行檢查

                • 示例:

                  • "compilerOptions": {"allowJs": true,"checkJs": true
                    }
                    
              • removeComments

                • 是否刪除注釋
                • 默認值:false
              • noEmit

                • 不對代碼進行編譯
                • 默認值:false
              • sourceMap

                • 是否生成sourceMap
                • 默認值:false
            • 嚴格檢查

              • strict
                • 啟用所有的嚴格檢查,默認值為true,設置后相當于開啟了所有的嚴格檢查
              • alwaysStrict
                • 總是以嚴格模式對代碼進行編譯
              • noImplicitAny
                • 禁止隱式的any類型
              • noImplicitThis
                • 禁止類型不明確的this
              • strictBindCallApply
                • 嚴格檢查bind、call和apply的參數列表
              • strictFunctionTypes
                • 嚴格檢查函數的類型
              • strictNullChecks
                • 嚴格的空值檢查
              • strictPropertyInitialization
                • 嚴格檢查屬性是否初始化
            • 額外檢查

              • noFallthroughCasesInSwitch
                • 檢查switch語句包含正確的break
              • noImplicitReturns
                • 檢查函數沒有隱式的返回值
              • noUnusedLocals
                • 檢查未使用的局部變量
              • noUnusedParameters
                • 檢查未使用的參數
            • 高級

              • allowUnreachableCode
                • 檢查不可達代碼
                • 可選值:
                  • true,忽略不可達代碼
                  • false,不可達代碼將引起錯誤
              • noEmitOnError
                • 有錯誤的情況下不進行編譯
                • 默認值:false

4、webpack

  • 通常情況下,實際開發中我們都需要使用構建工具對代碼進行打包,TS同樣也可以結合構建工具一起使用,下邊以webpack為例介紹一下如何結合構建工具使用TS。

  • 步驟:

    1. 初始化項目

      • 進入項目根目錄,執行命令 npm init -y
        • 主要作用:創建package.json文件
    2. 下載構建工具

      • npm i -D webpack webpack-cli webpack-dev-server typescript ts-loader clean-webpack-plugin
        • 共安裝了7個包
          • webpack
            • 構建工具webpack
          • webpack-cli
            • webpack的命令行工具
          • webpack-dev-server
            • webpack的開發服務器
          • typescript
            • ts編譯器
          • ts-loader
            • ts加載器,用于在webpack中編譯ts文件
          • html-webpack-plugin
            • webpack中html插件,用來自動創建html文件
          • clean-webpack-plugin
            • webpack中的清除插件,每次構建都會先清除目錄
    3. 根目錄下創建webpack的配置文件webpack.config.js

      • const path = require("path");
        const HtmlWebpackPlugin = require("html-webpack-plugin");
        const { CleanWebpackPlugin } = require("clean-webpack-plugin");module.exports = {optimization:{minimize: false // 關閉代碼壓縮,可選},entry: "./src/index.ts",devtool: "inline-source-map",devServer: {contentBase: './dist'},output: {path: path.resolve(__dirname, "dist"),filename: "bundle.js",environment: {arrowFunction: false // 關閉webpack的箭頭函數,可選}},resolve: {extensions: [".ts", ".js"]},module: {rules: [{test: /\.ts$/,use: {loader: "ts-loader"     },exclude: /node_modules/}]},plugins: [new CleanWebpackPlugin(),new HtmlWebpackPlugin({title:'TS測試'}),]}
        
    4. 根目錄下創建tsconfig.json,配置可以根據自己需要

      • {"compilerOptions": {"target": "ES2015","module": "ES2015","strict": true}
        }
        
    5. 修改package.json添加如下配置

      • {......"scripts": {"test": "echo \"Error: no test specified\" && exit 1","build": "webpack","start": "webpack serve --open chrome.exe"},......
        }
        
    6. 在src下創建ts文件,并在并命令行執行npm run build對代碼進行編譯,或者執行npm start來啟動開發服務器

5、Babel

  • 經過一系列的配置,使得TS和webpack已經結合到了一起,除了webpack,開發中還經常需要結合babel來對代碼進行轉換以使其可以兼容到更多的瀏覽器,在上述步驟的基礎上,通過以下步驟再將babel引入到項目中。

    1. 安裝依賴包:

      • npm i -D @babel/core @babel/preset-env babel-loader core-js
      • 共安裝了4個包,分別是:
        • @babel/core
          • babel的核心工具
        • @babel/preset-env
          • babel的預定義環境
        • @babel-loader
          • babel在webpack中的加載器
        • core-js
          • core-js用來使老版本的瀏覽器支持新版ES語法
    2. 修改webpack.config.js配置文件

      • ......
        module: {rules: [{test: /\.ts$/,use: [{loader: "babel-loader",options:{presets: [["@babel/preset-env",{"targets":{"chrome": "58","ie": "11"},"corejs":"3","useBuiltIns": "usage"}]]}},{loader: "ts-loader",}],exclude: /node_modules/}]
        }
        ......
        
      • 如此一來,使用ts編譯后的文件將會再次被babel處理,使得代碼可以在大部分瀏覽器中直接使用,可以在配置選項的targets中指定要兼容的瀏覽器版本。

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

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

相關文章

Android 樣式小結

關于作者&#xff1a;CSDN內容合伙人、技術專家&#xff0c; 從零開始做日活千萬級APP。 專注于分享各領域原創系列文章 &#xff0c;擅長java后端、移動開發、商業變現、人工智能等&#xff0c;希望大家多多支持。 目錄 一、導讀二、概覽三、使用3.1 創建并應用樣式3.2 創建并…

DJI ONBOARD SDK—— 基礎控制功能 Joystick的講解,使用和擴展

DJI ONBOARD SDK/DJI OSDK ROS—— 基礎控制功能 Joystick的使用 概述 使用OSDK/OSDK_ROS 的無人機飛行控制功能&#xff0c;能夠設置并獲取無人機各項基礎參數&#xff0c;控制無人機執行基礎飛行動作&#xff0c;通過Joystick 功能控制無人機執行復雜的飛行動作。 Joystic…

【精彩回顧】恒拓高科亮相第十一屆深圳軍博會

2023年12月6日-8日&#xff0c;由中國和平利用軍工技術協會、全國工商聯科技裝備業商會、深圳市國防科技工業協會等單位主辦以及政府相關部門支持&#xff0c;深圳企發展覽有限公司承的“2023第11屆中國&#xff08;深圳&#xff09;軍民兩用科技裝備博覽會&#xff08;深圳軍博…

02 CSS基礎入門

文章目錄 一、CSS介紹1. 簡介2. 相關網站3. HTML引入方式 二、選擇器1. 標簽選擇器2. 類選擇器3. ID選擇器4. 群組選擇器 四、樣式1. 字體樣式2. 文本樣式3. 邊框樣式4. 表格樣式 五、模型和布局1. 盒子模型2. 網頁布局 一、CSS介紹 1. 簡介 CSS主要用于控制網頁的外觀&#…

C#如何使用SqlSugar操作MySQL/SQL Server數據庫

一. SqlSugar 連接MySQL數據庫 public class MySqlCNHelper : Singleton<MySqlCNHelper>{public static SqlSugarClient CnDB;public void InitDB() {//--------------------MySQL--------------------CnDB new SqlSugarClient(new ConnectionConfig(){ConnectionString…

窮舉問題-搬磚(for循環)

某工地需要搬運磚塊&#xff0c;已知男人一人搬3塊&#xff0c;女人一人搬2塊&#xff0c;小孩兩人搬1塊。如果想用n人正好搬n塊磚&#xff0c;問有多少種搬法&#xff1f; 輸入格式: 輸入在一行中給出一個正整數n。 輸出格式: 輸出在每一行顯示一種方案&#xff0c;按照&q…

玩轉大數據12:大數據安全與隱私保護策略

1. 引言 大數據的快速發展&#xff0c;為各行各業帶來了巨大的變革&#xff0c;也帶來了新的安全和隱私挑戰。大數據系統通常處理大量敏感數據&#xff0c;包括個人身份信息、財務信息、健康信息等。如果這些數據被泄露或濫用&#xff0c;可能會對個人、企業和社會造成嚴重的損…

Unity 資源管理之Resources

Resources是一個特殊的文件夾&#xff0c;用于存放運行時加載的資源。 Resources文件夾中可以放置各種類型的資源文件&#xff0c;如紋理、模型、音頻、預制體等&#xff0c;一般用來存儲預制體和紋理信息。 通過API可以加載和訪問該文件夾及其子文件夾中的資源。 當我們打包…

大數據Doris(三十五):Unique模型(唯一主鍵)介紹

文章目錄 Unique模型(唯一主鍵)介紹 一、創建doris表 二、插入數據

【華為OD題庫-076】執行時長/GPU算力-Java

題目 為了充分發揮GPU算力&#xff0c;需要盡可能多的將任務交給GPU執行&#xff0c;現在有一個任務數組&#xff0c;數組元素表示在這1秒內新增的任務個數且每秒都有新增任務。 假設GPU最多一次執行n個任務&#xff0c;一次執行耗時1秒&#xff0c;在保證GPU不空閑情況下&…

海外獨立站站長常用的ChatGPT通用提示詞模板

目標市場&#xff1a;如何確定目標市場&#xff1f; 用戶需求&#xff1a;如何了解用戶需求&#xff1f; 網站設計&#xff1a;如何設計一個優秀的網站&#xff1f; 用戶體驗&#xff1a;如何提升用戶體驗&#xff1f; 功能規劃&#xff1a;請幫助我規劃網站的功能。 內容…

linux 應用開發筆記---【標準I/O庫/文件屬性及目錄】

一&#xff0c;什么是標準I/O庫 標準c庫當中用于文件I/O操作相關的一套庫函數&#xff0c;實用標準I/O需要包含頭文件 二&#xff0c;文件I/O和標準I/O之間的區別 1.標準I/O是庫函數&#xff0c;而文件I/O是系統調用 2.標準I/O是對文件I/O的封裝 3.標準I/O相對于文件I/O具有更…

SpringBoot 項目 Jar 包加密,防止反編譯

1場景 最近項目要求部署到其他公司的服務器上&#xff0c;但是又不想將源碼泄露出去。要求對正式環境的啟動包進行安全性處理&#xff0c;防止客戶直接通過反編譯工具將代碼反編譯出來。 2方案 第一種方案使用代碼混淆 采用proguard-maven-plugin插件 在單模塊中此方案還算簡…

調用別人提供的接口無法通過try catch捕獲異常(C#),見鬼了

前幾天做CA簽名這個需求時發現一個很詭異的事情&#xff0c;CA簽名調用的接口是由另外一個開發部門的同事(比較難溝通的那種人)封裝并提供到我們這邊的。我們這邊只需要把數據準備好&#xff0c;然后調他封裝的接口即可完成簽名操作。但在測試過程中&#xff0c;發現他提供的接…

[后端卷前端2]

綁定class 為什么需要樣式綁定呢? 因為有些樣式我們希望能夠動態展示 看下面的例子: <template><div><p :class"{active:modifyFlag}">class樣式綁定</p></div> </template><script>export default {name: "goo…

人力資源服務展示網站作用有哪些

就業勞務問題往往是不少人群關注的問題&#xff0c;每個城市都聚集著大量求業者&#xff0c;而人力資源管理公司每年也會新增不少&#xff0c;對求業者來說&#xff0c;通過人力資源公司可以快速便捷的找到所需工作&#xff0c;而對公司來說&#xff0c;市場大量用戶可以帶來收…

C語言第十八集(動態內存管理)

1.malloc函數可以開辟一塊空間,具體搜: 2.malloc函數申請的空間在內存的堆區 而且它只負責幫你申請空間,不負責幫你清理空間 3.free函數可以釋放內存 4.free函數釋放的是內存中的堆區,具體搜: 5.在free函數調用完后記得把對應的指針設為空指針 6.calloc函數跟malloc函數差…

揭秘字符串的奧秘:探索String類的深層含義與源碼解讀

文章目錄 一、導論1.1 引言&#xff1a;字符串在編程中的重要性1.2 目的&#xff1a;深入了解String類的內部機制 二、String類的設計哲學2.1 設計原則&#xff1a;為什么String類如此重要&#xff1f;2.2 字符串池的概念與作用 三、String類源碼解析3.1 成員變量3.2 構造函數3…

[今來] 神話故事:金馬和碧雞

文章目錄 金馬山和碧雞山神話傳說金馬坊和碧雞坊金馬碧雞 金馬山和碧雞山 昆明山明水秀&#xff0c;北枕蛇山&#xff0c;南臨滇池&#xff0c;金馬山和碧雞山則東西夾峙&#xff0c;隔水相對&#xff0c;極盡湖光山色之美。金馬山逶迤而玲瓏&#xff0c;碧雞山峭拔而陡峻&…

[Java][Map]linkedhashmap的引入

我們可以看到&#xff1a; linkedhashmap中元素的讀取是有順序的&#xff0c;基于這種雙向鏈表 我們可以優先讀取8索引bucket上的元素 然后讀取3索引bucket上的元素&#xff0c;以及其掛載的元素 最后讀取0索引bucket上的元素 bucket是hashbucket! 這種寫法是很有序的 也是…