TypeScript基礎(chǔ)類型介紹
TS 的靜態(tài)類型可以人為的分為兩類:
基礎(chǔ)類型:像布爾值(boolean)、數(shù)字(number)、字符串(string)、Any(任意類型)、Void(無類型)、Null、 Undefined、Never(無值類型)
對象類型:像數(shù)組、函數(shù)、對象、枚舉、元組。
1.基礎(chǔ)類型
TS的類型定義主要通過以下示例代碼中演示的方式進行定義:
;(function () {
/*
* 在 TS 中可以通過 let 變量名: 數(shù)據(jù)類型 = 變量值值得方式定義數(shù)據(jù)類型(類型注解)
* 也可以在定義的時候不指定數(shù)據(jù)類型,TS 自身會推斷該數(shù)據(jù)類型
*/
// 布爾型
let boo: boolean = false // 賦值非布爾值將會拋出異常
// 數(shù)字類型
let num: number = 100
// 字符串
let str: string = '字符串' // 使用單引號或者雙引號定位
str = `模板字符串` // 使用模板字符串定義
// Any 類型 -> 表示該類型可以為動態(tài)的類型,該類型在編譯的時候移除了類型檢查
let AnyType: any = 123
AnyType = true // 重復賦值不會拋出異常
// Void 類型 -> 通常用于沒有返回值的函數(shù)類型
function demo(): void {
console.log('測試void類型')
}
demo()
// 還有兩個比較特殊的類型,就是 null 和 undefined
// 這兩個類型是所有類型的子類型,也就是說可以將這兩個兩個類型賦值給 number、string 等類型
let u: undefined = undefined
num = u // 將 number 類型的變量賦值為 undefined
let n: null = null
boo = n // 將 boolean 類型的變量賦值為 null
})()
基礎(chǔ)類型比較簡單,特別類似于JavaScript,簡單看來就是比JavaScript多了一個類型定義
TS 中還有一個Never類型。該類型表示的是那些永遠不會存在的值得類型。
例如:never類型是那些總是會拋出異?;蚋揪筒粫蟹祷刂档暮瘮?shù)表達式或箭頭函數(shù)表達式的返回值類型。
2.對象類型
2.1數(shù)組
TS中的數(shù)組不同于JS中的數(shù)組,在TS中使用數(shù)組不僅可以將一個變量定義為數(shù)組,也可以定位數(shù)組中的類型。
示例代碼如下所示:
;(function () {
// 定義一個僅僅為數(shù)字的數(shù)組類型
let arr1: number[] = [1, 2, 3]
console.log(arr1)
// 定義一個可以為 數(shù)字 字符串 布爾值的數(shù)組
let arr2: (number | string | boolean)[] = ['1', '2', true]
console.log(arr2)
// 定義一個任意類型的數(shù)組
let arr3 = [1, ['1', '2', true], true]
console.log(arr3)
// 定義個對象類型的數(shù)組,對象中必須有 name 和 age 兩個屬性
const objectArray: { name: string; age: number }[] = [
{ name: '一碗周', age: 18 },
]
// 或者通過 type alias 類型別名的方式聲明
// 通過 type 定義一個類型別名
type User = { name: string; age: number }
const objectArr: User[] = [{ name: '一碗周', age: 18 }]
})()
2.2元組
元組類型允許表示一個已知元素數(shù)量和類型的數(shù)組,各元素的類型不必相同。
示例代碼如下所示:
;(function () {
// 定義一個值分別被 string 和 number 的元組
let tuple: [string, number] = ['123', 123]
console.log(tuple) // [ '123', 123 ]
// 通過索引賦值
tuple[0] = 'string'
console.log(tuple) // [ 'string', 123 ]
// 賦值其他類型
// tuple[0] = true
// console.log(tuple) // 拋出異常
})()
元組的主要作用就是約束數(shù)組中的每一項,及其數(shù)組的長度。
元組和數(shù)組是可以可以嵌套的,語法結(jié)構(gòu)如下所示:
// 元組和數(shù)組的嵌套
let tuples: [string, number][] = [
['123', 123],
['456', 456],
]
上面的代碼中,[string, number]表示一個元組,在后面增加[],就表示這個一個存放元組的數(shù)組。
2.3對象
一個對象中可以包含以上所有的類型,示例代碼如下所示:
;(function () {
// 定義一個對象,里面包含 MyName 和 age 兩個屬性,其中 MyName 為 string 類型 age 為number 類型
let obj: {
MyName: string
age: number
}
// 對象的賦值,如果不按上面指定的類型進行賦值會拋出異常
obj = {
MyName: '一碗周',
age: 18,
}
console.log(obj) // { MyName: '一碗周', age: 18 }
})()
在TS中我們并不需要在每個地方標注類型,因為類型推斷 可以幫助我們在不編寫額外代碼的,即可獲得其功能。但是你想讓你的代碼可讀性更好一些,可以寫上每個的類型。
3.類型推斷
在TypeScript中有的時候并需要明確指定類型,編譯器會自動推斷出合適的類型,比如下面這段代碼:
;(function () {
let myName = '一碗周'
myName = true // 錯誤:不能將類型“boolean”分配給類型“string”
})()
我們定義myName變量時,并沒有指定其數(shù)據(jù)類型,只是為他賦了一個字符串的值,但是我們?nèi)绻麑⑦@個值重新賦值為要給非string類型的值時,編譯器將會拋出異常。
這就是TypeScript中最簡單的類型推斷,根據(jù)右側(cè)的值來推測變量的數(shù)據(jù)類型。
3.1類型聯(lián)合中的類型推斷
什么是類型聯(lián)合請參考:聯(lián)合類型、交叉類型和類型保護
若一個變量可能具有多個類型的值時,TypeScript 會將多個類型合并起來,組成一個聯(lián)合類型,
示例代碼如下:
let arr = [1, '2'] // 定義一個包含字符串和數(shù)字的一個數(shù)組 // 為上面定義的數(shù)組重新賦值 // arr = [true, false] // 錯誤 不能將類型“boolean”分配給類型“string | number” // 還有如下例子 let val = arr.length === 0 ? 0 : '數(shù)組長度不是0' // val = false // 錯誤 不能將類型“boolean”分配給類型“string | number”
3.2上下文類型
在這之前介紹的例子可能都是按照=右邊的值來推斷=左邊的類型?,F(xiàn)在要介紹的上下文類型就與之前的類型推斷不同,編譯器會根據(jù)當期變量所處的上下文環(huán)境來推斷出變量的類型。
示例代碼如下:
;(function () {
// 定義一個接口
interface Person {
name: string
age: number
}
// 通過上面定義的接口定義一個數(shù)組
let arr: Person[] = [{ name: '一碗周', age: 18 }]
// 遍歷定義的數(shù)組
arr.forEach(item => {
// 根據(jù)當前所處的環(huán)境,編譯器自動推斷出 item 為 hobby 類型且不具有 hobby 屬性
console.log(item.hobby) // 類型“Person”上不存在屬性“hobby”
})
})()
在上面的代碼中,我們首先定義了一個Person的接口,然后用這個接口定義一個數(shù)組,遍歷該數(shù)組時編譯器推斷item為Person類型,所以編譯器拋出異常。
如果我們?yōu)楹瘮?shù)表達式的參數(shù)添加類型注解,上下文類型將會被忽略到,也就不會在報錯了。
示例代碼如下:
// 如果在上下文中明確類型信息,上下文將會被忽略。
arr.forEach((item: any) => {
// 根據(jù)當前所處的環(huán)境,編譯器自動推斷出 item 為 hobby 類型且不具有 hobby 屬性
console.log(item.hobby) // 類型“Person”上不存在屬性“hobby”
})
4.類型斷言
所謂的類型斷言就是你來告訴TS這個值得數(shù)據(jù)類型就是某樣的,你不需要做檢查。
這樣做得話他在運行是不會影響,只有在編譯的時候回影響。
示例代碼如下:
let SomeValue: any = 'this is a string' // 語法一 let StrLength1: number = (<string>SomeValue).length // 語法二 as 語法 let StrLength2: number = (SomeValue as string).length
值得注意的是:在TS中使用JSX時,只有第二種語法是被支持的。
到此這篇關(guān)于TypeScript基礎(chǔ)類型介紹的文章就介紹到這了,更多相關(guān)TypeScript基礎(chǔ)類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS?中Json字符串+Cookie+localstorage
這篇文章主要介紹了JS?中Json字符串+Cookie+localstorage,Json主要用于前后端交互,是一種數(shù)據(jù)格式,相較于Xml,使用起來更加便捷,下面文章將對他們詳細介紹,需要的朋友可以參考一下2021-12-12
Svelte調(diào)試模式j(luò)s級別差異和細化后的體積差異詳解
這篇文章主要為大家介紹了Svelte調(diào)試模式j(luò)s級別差異和細化后的體積差異詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-12-12
JS常用正則表達式超全集(密碼強度校驗,金額校驗,IE版本,IPv4,IPv6校驗)
網(wǎng)上有很多關(guān)于JS常用正則表達式的文章很全但今天為大家分享一些最新,且非常有用的正則表達式其中有密碼強度校驗,金額校驗,IE版本,IPv4,IPv6校驗等2020-02-02

