TypeScript基本數據類型

一、TypeScript介紹

1.TypeScript是由微軟開發的一款開源的編程語言。
2.TypeScript是JavaScript的超集,遵循最新的ES6、ES5規范。TypeScript擴展了JavaScript的語法。
3.TypeScript更像后端java、C#面向對象語言。
4.最新的Vue、React也可以集成TypeScript。
5.Nodejs框架Nestjs、midway中用的就是TypeScript語法。

TypeScript相比JS的優勢

· 優勢一:類型化思維方式,使開發更加嚴謹,提前發現錯誤,減少改bug時間
· 優勢二:類型系統提高了代碼可讀性,并使維護和重構代碼更加容易
· 優勢三:補充了接口、枚舉等開發大型應用時JS缺失的功能

配置 typeScript+nodejs 和 react+typeScript 開發環境

1.安裝nodejs(中文文檔 http://nodejs.cn,node --version查看版本)
運行TS/JS代碼的工具:Node.js
JavaScript的運行環境:瀏覽器、Node.js
Node.js讓JavaScript擺脫了瀏覽器的束縛,可以實現服務端/桌面端編程等等。
2.npm(安裝好node時就安裝好了npm, npm -v查看是否安裝成功)
3.typescript (終端命令,輸入 cnpm install -g typescript 或者 yarn global add typescript,輸入 tsc -v 查看是否安裝成功)

VSCode中搭建typeScript+nodejs開發環境

1.新建一個空文件夾
2.使用VSCode打開文件夾
3.生成package.json 文件

npm init -y
VSCode生成自動編譯.ts文件

4.創建tsconfig.json文件

tsc --init 生成配置文件

負責獎ts代dccg轉為瀏覽器和nodejs識別的js代碼

5.打開tsconfig.json文件,把其中的 “outDir" 和 ”rootDir“ 的注釋打開,然后分別把后面的內容修改成 " ./out " 和 " ./src ",然后就要在左邊的文件欄中創建這兩個文件(out表示輸出文件目錄和src表示寫代碼的資源文件目錄)

image.png

6.在src下創建一個index.ts文件, 同時會在out文件夾下生成index.js文件


image.png

7.運行index.ts的代碼,需要修改 package.json 文件中的 "scripts"
修改前:


image.png

修改后:
image.png

因為修改了 outDir 使得生成的 Index.js 文件放在了定義的文件夾中,那么要編譯 typeScript 的代碼,實際上就是要編譯它的 js 代碼文件,所以這里也需要做相應的修改,否則運行報錯

8.運行

 npm start

搭建 react + typeScript 開發環境

create-react-app react_typescript --typescript
創建成功,再輸入終端命令: cd react_typescript
運行:yarn start

TypeScript

  1.編譯型語言
  2.強類型語言
  3.真正面向對象的語言

變量

變量:是用來存儲數據的容器,并且是可以變化的,為變量指定了類型就只能給這個變量設置相同類型的值
命名規則:變量只能出現:數字、字母、下劃線、$,并且不能以數字開頭。變量名稱區分大小區

基本使用

let age: number = 18
let name: String = 'name'

var的作用域是函數作用域,在內層循環中和外層循環中使用的是同一個變量,在內層的修改會改變外層。
let的作用域是塊級作用域,在內層循環中的變量和外層循環中的變量不是同一個變量,在內層的修改不會改變外層。
var:可以聲明同名變量,只會得到一個變量,let一個變量只能聲明一次

var age = 17; var age = 18; // 不會報錯
let age = 0;  let age = 1; // 報錯

const:定義的是常量,聲明的的變量不能被重復賦值,const聲明變量是必須立刻賦值;const聲明的對象,對象本身是不能被賦值覆蓋,但是對象的可修改屬性是允許被修改值的

const num: Number = 10;
const info = {
    name: 'name',
    age: num,
}
info.name = 'na'
info.age = 20
console.log(info);
// { name: 'na', age: 20 }

數據類型

TypeScript中的數據類型分為兩大類:原始類型(基本數據類型)、對象類型(復雜數據類型)
常用基本數據類型:number、string、boolean、undefined、null。

基本數據類型

數字類型
數字類型:包含整數和浮點型, 用number表示.

let age: number = 18 // 整數
let score: number = 18.8  // 浮點型

字符串類型
字符串:使用string表示文本數據類型。可以使用(" ")或者(' ')表示字符串

let age: number = 18
let name: sting = '姓名'
console.log( name + `${age}`)
// 姓名18
console.log(name+age) // 加號兩邊只要有一邊是字符串,就執行字符串拼接
// // 姓名18

布爾型
最基本的數據類型就是簡單的true/false值,不能用0和1代表
關鍵字: boolean

let is: boolean = true

數組
數組:是用于存放多個數據的集合。需要聲明時指定數組中元素的類型,多個元素之間使用( , )分隔, 數組中的每一項內容稱為元素
創建數組

// [](中括號)表示數組。如果數組中沒有內容,就是一個空數組
1. [](中括號)表示數組
let 數組名: 元素類型[] = [ 元素1, 元素2, 元素3, ... ]
let list: string[] = []
2. 使用數組泛型表示,Array<元素類型>=[ 元素1, 元素2, 元素3, ... ]:
let list: Array<number> = [1, 2, 3]
3. new Array()
let list: number[] = new Array(1, 2, 3)  // 創建一個數組
console.log(list)   // [ 1, 2, 3 ]
4.用any類型創建數組
var arr: any[] = ['12345', 2345, true]

// 數組長度
console.log(list.length)   // 3
// 修改元素,下標存在表示修改
list[1] = 5
console.log(list)   // [ 1, 5, 3 ]
// 添加元素,下標不存在表示添加
list[3] = 5
遍歷數組
for (let i = 0; i < list.length; i++) {
    console.log(list[i])
}
// 1
// 5
// 3
// 5

· push()方法將一個或多個元素添加到數組的未尾,并返回該數組的長度

let num: number[] = [1, 3, 5]
num.push(7, 9)
console.log(num)
// [ 1, 3, 5, 7, 9 ]
let len = num.push()
console.log(len)
// 5

· forEach
forEach方法的參數是一個函數,這種函數也稱為回調函數,是作為forEeach方法的實參傳入,不需要指定類型注解
forEach方法的執行過程: 遍歷整個數組,為數組的每一項元素,調用一次回調函數,無法中間停止

let num: number[] = [1, 3, 5, 7]
num.forEach(function(item, index){
    console.log(item, index)
})
// 1   0
// 3   1
// 5   2
// 7   3

some方法:遍歷數組,查找是否有一個滿足條件的元素(如果有,就可以停止循環)
循環特點:根據回調函數的返回值,決定是否停止循環,如果返回true,就停止;返回false就繼續循環

let num: number[] = [1, 12, 9, 8, 6]
num.some(function(num){
    console.log(num)
    if (num > 10) {
        return true
    }
})
//  1
//  12

元組(Tuple)

元組屬于數組的一種,就是固定長度的數組,合并了不同類型的對象,規定了元素數量和每個元素類型的數組,聲明時要指完元素個數為每個元素規定類型,元素的類型和值必須一一對應。
語法:[數據類型, 數據類型, 數據類型, ... ]

let tuple: [string, number, boolean] = ['tuple', 20, false];
console.log( tuple);
// [ 'tuple', 20, false ]
console.log( tuple[1]);
// 20
修改元組
tuple[1] = 10
console.log(tuple)
// [ 'tuple', 10 ]

在聲明一個元組時,可以在元素類型后綴一個問號 ? 來說明元素是可選的,可選元素類型必須在必選元素類型后面,如果一個元素類型后面后綴了一個問號 ?,那么這個元素之后的所有元素類型都要后綴一個問號。

let tup1: [string, number?, number?]
tup1 = ['tup']
tup1 = ['tup', 1]
tup1 = ['tup', 1, 3]

使用 push() 方法向這個元組中添加新的元素

let tup2: [string, number, number] = ['tup2', 2, 3]
tup2.push('tup')
console.log(tup2);
// [ 'tup2', 2, 3, 'tup' ]

使用 pop() 方法刪除元組中最后一個元素

let tup3: [string, number, number] = ['tup2', 2, 3]
tup3.pop()
console.log(tup3);
// [ 'tup2', 2 ]

解構元組

let tup3: [string, number, boolean] = ['tup3', 2, true]
let [a, b, c] = tup3
console.log(a);
console.log(b);
console.log(c);
//  tup3
//  2
//  true

枚舉

枚舉是組織有關聯數據的一種方式,枚舉使用 enum 關鍵詞來聲明一個枚舉
使用場景:當變量的值只能是幾個固定值中的一個,應該使用枚舉來實現
數字枚舉,聲明了一個枚舉成員均不帶初始化值的枚舉,枚舉的成員值從 0 開始,依次遞增;聲明帶初始化值的枚舉,枚舉的成員值是在上一個成員的基礎上 +1;
· 枚舉的特點
數字枚舉經過編譯之后會生成 lookup table (反向映射表),即除了生成鍵值對的集合,還會生成值鍵對的集合。
字符串枚舉沒有自增行為,必須為每一個成員賦值
枚舉成員是只讀的,只可以訪問,不能賦值
創建枚舉的語法:

enum 枚舉名稱 { 成員1, 成員2, 成員3, ... }
enum enumTS {
    ts1,
    ts2 = 10,
    ts3,
    ts4 = 'ts4',
    ts5 = 'ts5',
}
console.log(enumTS);
//   {
//     '0': 'ts1',
//    '10': 'ts2',
//     '11': 'ts3',
//     ts1: 0,
//     ts2: 10,
//     ts3: 11,
//     ts4: 'ts4',
//     ts5: 'ts5'
//   }

console.log(enumTS.ts2);
// 10

Any

Any: 任意類型可以是 Number String Boolean Object ... 等等 JS 中存在的類型,一個變量設置為any類型后相當于對該變量關閉了TS的類型檢測
聲明變量如果不指定類型,TS會根據最后一次給變量賦值判斷變量的類型,變量不賦值會自動判斷變量的類型為any,any類型只能賦值給unknown類型

let any: any = 2
any = 'any'
console.log(any);
// any
let anyList: any[] = [1, '2', true, false]
console.log(anyList);
// [ 1, '2', true, false ]

unknown

unknown表示未知類型的值,實際上是一個類型安全的any
unknown類型的變量,不能直接賦值給其他變量,只能賦值給any類型

let u: unknown
u = 10
u = true
u = 'any'
let a
a = u

Void

void 表示空,是 undefined 的子類型,表示沒有類型,一般用于表示沒有返回值的函數。

// 表示方法沒有返回任何類型
function say(): void {
    console.log('沒有返回值')
}
say()
//  沒有返回值

undefined、null 是never數據類型的子類型

· 共同點:只有一個值,值為類型本身(為其它值報錯)。
· undefined:表示聲明但未賦值的變量值(找不到值)
· null:表示聲明了變量并已賦值,值為null(能找到,值就是null)

var num: number
console.log(num)   //   會報錯(在賦值前使用了變量“num”)
var num: undefined
console.log(num)  //   不會報錯
定義沒有賦值就是undefined
var num: number | undefined
console.log(num)     //   不會報錯

let u: undefined = undefined
let n: null = null
console.log(u, n)
// undefined null
let u: undefined
console.log(u)
// undefined 

never

never代表不存在的值的類型,常用作拋出異常或無限循環的函數返回類型
never類型是ts中的底部類型,所有類型都是never類型的父類,never類型的值可以賦給任意類型的變量

function nev(): never{
    while(true) {
        console.log('死循環')
    }
}

function nev(): never{
    throw new Error('錯誤')
}

Object

Object:表示任意的js對象

let a: object
a = {};
a = function() {

}

// {} 用來指定對象中可以包含的屬性
// 語法:{ 屬性名: 屬性值, 屬性名: 屬性值, 屬性名: 屬性值, ... }
// 在屬性的后邊加上?,表示屬性是可選的

let b: { name: string, age?: number}
b = { name: 'name'}
let c: { name: string, [info: string]: any }
c = { name: '1345', age: 10, sex: 12 }

類型別名

簡化類型的使用

type type = 1 | 2 | 3 | 4 | 5
let k: type
let l: type
k = 1

聯合類型

表示取值可以為多種類型中的一種
let 變量名: 變量類型1 | 變量類型2 | 變量類型3 = 值;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容