typeScript學習隨筆(一)

来源:https://www.cnblogs.com/daizhong/archive/2019/08/06/11277781.html
-Advertisement-
Play Games

TypeScript學習隨筆(一) 這麼久了還不沒好好學習哈這麼火的ts,邊學邊練邊記吧! 啥子是TypeScript TypeScript 是 JavaScript 的一個超集,支持 es6 標準。 TypeScript 由微軟開發的自由和開源的編程語言。 TypeScript 設計目標是開發大型 ...


TypeScript學習隨筆(一)

這麼久了還不沒好好學習哈這麼火的ts,邊學邊練邊記吧!

啥子是TypeScript 

TypeScript 是 JavaScript 的一個超集,支持 es6 標準。

TypeScript 由微軟開發的自由和開源的編程語言。

TypeScript 設計目標是開發大型應用,它可以編譯成純 JavaScript,編譯出來的 JavaScript 可以運行在任何瀏覽器上。

語言特性

TypeScript 是一種給 JavaScript 添加特性的語言擴展。增加的功能包括:

  • 類型批註和編譯時類型檢查
  • 類型推斷
  • 類型擦除
  • 介面
  • 枚舉
  • Mixin
  • 泛型編程
  • 名字空間
  • 元組
  • Await

 

以下功能是從 ECMA 2015 反向移植而來:

  • 模塊
  • lambda 函數的箭頭語法
  • 可選參數以及預設參數

額。。。。反正直接看,大部分都不太懂事什麼玩意兒。。。,肯定是重點就是了,so繼續看吧!

JavaScript 與 TypeScript 的區別

TypeScript 是 JavaScript 的超集,擴展了 JavaScript 的語法,因此現有的 JavaScript 代碼可與 TypeScript 一起工作無需任何修改,TypeScript 通過類型註解提供編譯時的靜態類型檢查。

TypeScript 可處理已有的 JavaScript 代碼,並只對其中的 TypeScript 代碼進行編譯。

TypeScript 安裝

噼里啪啦。。。老一套

npm install -g typescript

$ tsc -v
Version 3.3.3333

然後我們新建一個 test.ts 的文件,代碼如下:
var message:string = "Hello World" 
console.log(message)
 

通常我們使用 .ts 作為 TypeScript 代碼文件的擴展名。

然後執行以下命令將 TypeScript 轉換為 JavaScript 代碼:

tsc test.ts

這時候再當前目錄下(與 test.ts 同一目錄)就會生成一個 test.js 文件,代碼如下:

var message = "Hello World";
console.log(message);

使用 node 命令來執行 test.js 文件:

$ node test.js 
Hello World

TypeScript 轉換為 JavaScript 過程如下圖:

看到這,明顯 :string 肯定就是傳說中的限制了類型,把我們的弱類型javascript 搞成強類型了,來來來自己試一下:

var message:string =222;
console.log(message);

 所謂時間是檢驗真理的唯一標準,果不其然

提示還是很到位的,明說了,這類型不是“string”,不能轉;  gogogo 繼續

TypeScript 基礎語法

TypeScript 程式由以下幾個部分組成:

  • 模塊
  • 函數
  • 變數
  • 語句和表達式
  • 註釋

 

第一個 TypeScript 程式

剛纔寫過了,多補充一個:同時編譯多個 ts 文件: 

tsc file1.ts, file2.ts, file3.ts

tsc 常用編譯參數如下表所示:

序號編譯參數說明
1.

--help || -h

顯示幫助信息

2.

--module

載入擴展模塊

3.

--target

設置 ECMA 版本

4.

--declaration

額外生成一個 .d.ts 擴展名的文件。

tsc ts-hw.ts --declaration

以上命令會生成 ts-hw.d.ts、ts-hw.js 兩個文件。

5.

--removeComments

刪除文件的註釋

6.

--out

編譯多個文件併合併到一個輸出的文件

7.

--sourcemap

生成一個 sourcemap (.map) 文件。

sourcemap 是一個存儲源代碼與編譯代碼對應位置映射的信息文件。

8.

--module noImplicitAny

在表達式和聲明上有隱含的 any 類型時報錯

9.

--watch || -w

在監視模式下運行編譯器。會監視輸出文件,在它們改變時重新編譯。











































TypeScript 保留關鍵字

就是那些不能亂取名字的

break as any switch
case if throw else
var number string get
module type instanceof typeof
public private enum export
finally for while void
null super this new
in return true false
any extends static let
package implements interface function
new try yield const
continue do catch

















空白和換行

TypeScript 會忽略程式中出現的空格、製表符和換行符。

空格、製表符通常用來縮進代碼,使代碼易於閱讀和理解

TypeScript 區分大小寫

嚴格點好,媽媽再也不用擔心我亂取名,亂用名了。

分號是可選的

可用可不用,但是。。。但是。。。寫在同一行就必須要了哦,不然就報錯哦;還是那句話:時間是檢驗整理的唯一標準。。。。gogogo

console.log("aaa") console.log("bbb");

提示也夠明顯,也方便找;不錯不錯

 

TypeScript 支持兩種類型的註釋

  • 單行註釋 ( // ) − 在 // 後面的文字都是註釋內容。

  • 多行註釋 (/* */) − 這種註釋可以跨越多行。

這個都一樣一樣的。咦...順便回一下HTML 和css的註釋

html

1.普通註釋 :  <!-- html註釋的內容 -->

2.條件註釋

  1. <h1>您正在使用IE瀏覽器</h1
  2. <!--[if IE 6]>  
  3. <h2>如果IE版本是 6,我將被IE6瀏覽器顯示</h2>  
  4. <![endif]-->  
  5. <!--[if IE 7]>  
  6. <h2>如果IE版本是 7,我將被IE7瀏覽器顯示</h2>  
  7. <![endif]--

css

和js一樣一樣的------------ (/* */)   || //  

 

TypeScript 與面向對象

TypeScript 是一種面向對象的編程語言。
又來回顧下什麼是面向對象:
面向對象是一種對現實世界理解和抽象的方法。
(太TM抽象了。大概就是“萬物皆對象”,把什麼都可以當成一個對象,你只需要知道怎麼做能得到你要的東西,而不需要知道東西是怎麼做的,怎麼出來的。
好比你做鍛煉,你知道俯卧撐能鍛煉上肢就好了,並不知道他帶動什麼什麼核心肌肉什麼的,什麼轉什麼的,一大堆)

面向對象主要有兩個概念:對象和類。

  • 對象:對象是類的一個實例(對象不是找個女朋友),有狀態和行為。例如,一條狗是一個對象,它的狀態有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。
  • :類是一個模板,它描述一類對象的行為和狀態。
  • 方法:方法是類的操作的實現步驟。
  • 下圖中 girl、boy 為類,而具體的每個人為該類的對象:

TypeScript 面向對象編程實例:

class Site { 
   name(){ 
      console.log("Cory") 
   } 
} 
var obj = new Site(); 
obj.name();

 

TypeScript 基礎類型

數據類型關鍵字描述
任意類型 any 聲明為 any 的變數可以賦予任意類型的值。
數字類型 number

雙精度 64 位浮點值。它可以用來表示整數和分數。

let binaryLiteral: number = 0b1010; // 二進位
let octalLiteral: number = 0o744;    // 八進位
let decLiteral: number = 6;    // 十進位
let hexLiteral: number = 0xf00d;    // 十六進位
字元串類型 string

一個字元系列,使用單引號(')或雙引號(")來表示字元串類型。反引號(`)來定義多行文本和內嵌表達式。

let name: string = "Runoob";
let years: number = 5;
let words: string = `您好,今年是 ${ name } 發佈 ${ years + 1} 周年`;
布爾類型 boolean

表示邏輯值:true 和 false。

let flag: boolean = true;
數組類型

聲明變數為數組。

// 在元素類型後面加上[]
let arr: number[] = [1, 2];

// 或者使用數組泛型
let arr: Array<number> = [1, 2];
元組

元組類型用來表示已知元素數量和類型的數組,各元素的類型不必相同,對應位置的類型需要相同。

let x: [string, number];
x = ['Runoob', 1];    // 運行正常
x = [1, 'Runoob'];    // 報錯
console.log(x[0]);    // 輸出 Runoob
枚舉 enum

枚舉類型用於定義數值集合。

enum Color {Red, Green, Blue};
let c: Color = Color.Blue;
console.log(c);    // 輸出 2
void void

用於標識方法返回值的類型,表示該方法沒有返回值。

function hello(): void {
    alert("Hello Runoob");
}
null null

表示對象值缺失。

undefined undefined

用於初始化變數為一個未定義的值

never never

never 是其它類型(包括 null 和 undefined)的子類型,代表從不會出現的值。






















































註意:TypeScript 和 JavaScript 沒有整數類型。

Any 類型

任意值是 TypeScript 針對編程時類型不明確的變數使用的一種數據類型,它常用於以下三種情況。

1、變數的值會動態改變時,比如來自用戶的輸入,任意值類型可以讓這些變數跳過編譯階段的類型檢查,示例代碼如下:
let x: any = 1;    // 數字類型
x = 'I am who I am';    // 字元串類型
x = false;    // 布爾類型
2、改寫現有代碼時,任意值允許在編譯時可選擇地包含或移除類型檢查,示例代碼如下:
let x: any = 4;
x.ifItExists();    // 正確,ifItExists方法在運行時可能存在,但這裡並不會檢查
x.toFixed();    // 正確

3、定義存儲各種類型數據的數組時,示例代碼如下:

let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;

Null 和 Undefined

null

在 JavaScript 中 null 表示 "什麼都沒有"。

null是一個只有一個值的特殊類型。表示一個空對象引用。

用 typeof 檢測 null 返回是 object。

undefined

在 JavaScript 中, undefined 是一個沒有設置值的變數。

typeof 一個沒有值的變數會返回 undefined。

Null 和 Undefined 是其他任何類型(包括 void)的子類型,可以賦值給其它類型,如數字類型,此時,賦值後的類型會變成 null 或 undefined。而在TypeScript中啟用嚴格的空校驗(--strictNullChecks)特性,就可以使得null 和 undefined 只能被賦值給 void 或本身對應的類型,示例代碼如下:

// 啟用 --strictNullChecks
let x: number;
x = 1; // 運行正確
x = undefined;    // 運行錯誤
x = null;    // 運行錯誤
上面的例子中變數 x 只能是數字類型。如果一個類型可能出行 null 或 undefined, 可以用 | 來支持多種類型,示例代碼如下:
// 啟用 --strictNullChecks
let x: number | null | undefined;
x = 1; // 運行正確
x = undefined;    // 運行正確
x = null;    // 運行正確

never 類型

never 是其它類型(包括 null 和 undefined)的子類型,代表從不會出現的值。這意味著聲明為 never 類型的變數只能被 never 類型所賦值,在函數中它通常表現為拋出異常或無法執行到終止點(例如無限迴圈),示例代碼如下:

 

學習文檔鏈接:https://www.runoob.com/typescript/ts-tutorial.html





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

-Advertisement-
Play Games
更多相關文章
  • html 結構 script部分 ...
  • 數據結構: 需求:我在vue頁面需要拿到url值並顯示圖片 代碼寫法: 註意:一定要判斷否則拿到的large對象一直是空值, 那麼img.large.url將會取不到值,會報 url 'undefined'錯誤的 ...
  • 1. filter針對數組起過濾作用篩選出符合條件的一個或多個元素 lvar newarr = [ { num: 1, val: 'ceshi', flag: 'aa' }, { num: 2, val: 'ww' } ] console.log(newarr.filter(item => item ...
  • 1. typeof 運算符 typeof 可以判斷基本數據類型: typeof 123; // "number" typeof 'abc'; // "string" typeof true; // "boolean" 碰到複合數據類型的情況: typeof {}; // "object" typeo ...
  • 1.1什麼是函數提升和變數的提升? JS引擎在運行整個JS代碼的過程中,分為倆步。 第一步是讀取和解析JS代碼,第二部是執行。 在引擎解析JS代碼的時候,當解析器遇見變數聲明(var 變數名)和函數聲明 (function 函數名)的時候,會將這些聲明提到各自作用域的最前面。 1.2 作用域 在ES ...
  • 1、構建項目 上面的第一條,也就是 aaa 這一個選項在你第一次創建項目的時候是並不會出現的,只有你第一次創建完成項目後回提示你保存為預設配置模板,下次新建項目的時候就可以使用你選用的配置快速新建項目了,不需要再重新選擇配置項目了。 第二條選項便是 vue cli 3 預設的項目模板,包含 babe ...
  • 在前一篇文章中,我們介紹瞭如何在JavaScript中實現集合。字典和集合的主要區別就在於,集合中數據是以[值,值]的形式保存的,我們只關心值本身;而在字典和散列表中數據是以[鍵,值]的形式保存的,鍵不能重覆,我們不僅關心鍵,也關心鍵所對應的值。 我們也可以把字典稱之為映射表。由於字典和集合很相似, ...
  • jQuery 滑動方法有三種:slideDown()、slideUp()、slideToggle()。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...