1. 程式人生 > 其它 >TypeScript 型別 類型別名 型別斷言

TypeScript 型別 類型別名 型別斷言

JavaScript 資料型別

ECMAScript定義了8種資料型別

7種原始型別
Boolean
Null
Undefined
Number
BigInt(ES10)
String
Symbol

1種引用型別
Object

TypeScript 型別

需要注意的幾個點

  1. unitypes聯合型別 值可以是多個型別的其中之一
// 變數
let unitTypsVar: Number | String | Object;
unitTypsVar = {}
console.log(unitTypsVar)

// 指定陣列元素型別
let typesArr : (number | string | Object) [] = [1,2,3,'4',{}]
  1. never型別

代表函式的終點無法被執行到

let fnNever: () => never = () => {
    throw new Error('never')
}
function infiniteLoop(): never {
    while (true) {
    }
}
  1. 元組

元組Tuple 起源於函數語言程式設計,指定陣列型別和陣列元素個數

let tuple : [string,number,object] = ['a',1,{}]
  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)