該系列基于typescript中文文檔官網(wǎng)重新學習編寫的demo,部分描述未必正確,又或者說對到typescript
中不一定正確蕊温,僅做學習記錄,該系列源于ts4.9.5版本進行試驗,與官網(wǎng)相比是不會一直重復串知識點拔第,方便聚焦知識點的實現(xiàn)
string類型
let stringType: string = '字符串'
let sentence: string = `這是一個類型為${stringType}的句子`
// stringType = 123 // ts報錯,類型一經(jīng)指定不允許變更
console.log(stringType, sentence)
布爾類型
let booleanType: boolean = true
console.log(booleanType)
數(shù)值類型场钉,二進制蚊俺、八進制、十進制逛万、十六進制均合法可識別
let decLiteral: number = 6 // 十進制
let hexLiteral: number = 0xf00d // 十六進制春叫,以0x開頭
let binaryLiteral: number = 0b1010 // 二進制,以0b開頭
let octalLiteral: number = 0o744 // 八進制泣港,以0開頭
console.log(decLiteral, hexLiteral, binaryLiteral, octalLiteral)
數(shù)組類型
let arrayType: Array<number> = [1, 2, 3]
let arrayType2: string[] = ['1', "2", `3`]
console.log(arrayType, arrayType2)
元組類型暂殖,允許表示一個已知元素數(shù)量和類型的數(shù)組,各元素的類型不必相同
let tupleType: [string, number] = ['string', 2]
console.log(tupleType)
// console.log(tupleType[2]) // 報錯当纱,訪問了一個超過其長度限制的索引
// tupleType[2] = "abc" // 報錯呛每,不能將類型"abc"分配給類型“undefined”,但是文檔可以坡氯,應該是中文文檔沒對應最新版ts
枚舉類型晨横,左邊是值洋腮,右邊是元素編號
如果值是數(shù)值(也就是下標,是允許通過下標取key的手形,否則只能通過key取value)
enum Color { red, green, blue }
const redColorIndex = Color['red'] // 0
const greenColor = Color[1] // 'green'
console.log(redColorIndex, greenColor)
如果值非數(shù)值啥供,則只能通過鍵來取值,不允許反瓤饪贰(Color['r']
)伙狐,否則即使寫成Color['r' as keyof typeof Color]
,解決掉報錯構(gòu)建出來的結(jié)果也不對瞬欧,依然會獲取到undefined
enum Color {
red = 'r' ,
green = 'g',
blue = 'b'
}
let getColor: string = Color['red']
console.log(getColor)
any類型贷屎,允許發(fā)生變更,用于變量的指定類型艘虎,不同于Object類型唉侄,其方法也是允許使用的
let anyType: any = ['test', 123, [0]]
anyType[2] = 123 // 變更類型,超過邊界都是可以的
anyType = 'change'
let anyObjectType: Object = "abc"
anyObjectType = 4.125
// anyObjectType.toFixed(3) // 雖然允許改變類型野建,但是使用方法的時候會報錯
console.log(anyType, anyObjectType)
void類型属划,表示無任何返回
// let unusable: void = null // 舊版ts中null也會合法,需要開啟了strictNullChecks候生,新版中默認為開啟同眯,如果需要關(guān)閉需要設置為false
function voidFn(): void {
console.log('函數(shù)不返回任何內(nèi)容')
return undefined // 這個是合法的,但不能返回null或其他基本類型
}
voidFn()
null 和 undefined類型陶舞,舊版里為其他類型子集嗽测,新版中默認已開啟strictNullChecks,所以不合法
// let nullType: number = undefined
let nullType: null = null
let undefinedType: undefined = undefined
let mutipleType: number | null | undefined = 123
console.log(nullType, undefinedType, mutipleType)
never類型肿孵,表示永遠不會執(zhí)行到唠粥,可以賦值給任何類型,但任何其他類型均不能賦值給never
function errorFn(message: string): (never | Error) { // 這么寫是為了讓下面不會被檢測為不會被執(zhí)行的代碼
throw Error(message)
}
errorFn('報錯啦')
function fail(message: string): Error {
return Error(message)
}
fail('失敗')
// 這個不要跑run code
function infiniteLoop(): never {
while (true) {
}
}
infiniteLoop()
object類型
該類型實際開發(fā)中基本用不到停做,表示非原始類型晤愧,作為約束不夠嚴謹,作為類型又無法使用對象方法蛉腌,僅做記錄
declare function create(o: object | null): void;
create({ prop: 0 })
create(null)
類型斷言
尖括號語法
let someValue: any = "this is a string"
let strLength: number = (<string>someValue).length
as
語法官份,JSX中只能使用該語法
let replaceStr: string[] = (someValue as string).split(' ')
console.log(strLength, replaceStr) // 16, [ 'this', 'is', 'a', 'string' ]