TypeScript 型別 類型別名 型別斷言
阿新 • • 發佈:2022-04-11
JavaScript 資料型別
ECMAScript定義了8種資料型別
7種原始型別
Boolean
Null
Undefined
Number
BigInt(ES10)
String
Symbol
1種引用型別
Object
TypeScript 型別
需要注意的幾個點
- unitypes聯合型別 值可以是多個型別的其中之一
// 變數 let unitTypsVar: Number | String | Object; unitTypsVar = {} console.log(unitTypsVar) // 指定陣列元素型別 let typesArr : (number | string | Object) [] = [1,2,3,'4',{}]
- never型別
代表函式的終點無法被執行到
let fnNever: () => never = () => {
throw new Error('never')
}
function infiniteLoop(): never {
while (true) {
}
}
- 元組
元組Tuple 起源於函數語言程式設計,指定陣列型別和陣列元素個數
let tuple : [string,number,object] = ['a',1,{}]
- 函式型別
定義函式型別,首先定義形參列表,然後用=>定義函式返回值型別
let sumCust: (x: number, y?: number) => number; sumCust = function sum(x: number, y?: number) { typeof y === "number" && (x += y) return x }
類型別名
使用type來定義類型別名,方便簡化程式碼,方便型別複用
function sum(x: number, y: number): number {
return x + y
}
// 抽取型別
type sumType = (a: number, b: number) => number
// 複用
const sum2: sumType = sum
sum2(1, 2)
型別斷言
有時候我們需要在還不確定型別的時候訪問型別的屬性和方法,但這個時候編譯器往往會報錯
型別斷言就是告訴編譯器,你比它更瞭解這個型別,而且它不應該因此而發生錯誤
// 型別斷言 type inputType = string | number; function getLength(input: inputType): number { return (input as string).length ? (input as string).length : (input as number).toString().length // 另一種斷言寫法 // return (<string>input).length ? (<string>input).length : (<number>input).toString().length } getLength('a') getLength(123)