iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0

TypeScript中的類型推斷與高級類型

類型推斷

  • TypeScirpt對變數要求有明確的類型,這對開發者增加了另外的工作量,不過這需要太擔心,因為TypeScript會根據變數的賦值來自動推斷其類型
  • 除了標準類型以外,自訂類型也可以被推斷。
//標準類型
var num = 2;   //變數賦值為2,此時num被自動推斷為number類型
function numFunc(n:number){
    return n*n;
}
numFunc(num);  //編譯正常

//自訂類型
var p = new People('One') //p自動推斷為People類型
console.log(p.name);
  • 對於陣列運算式,自動推斷會稍微麻煩一點,因為它需要推斷出最適合的通用類型
var l = [1, 'hello', false, null];
//l會被推斷成(number | string | boolean | null)[]的聯合類型陣列
var l2:(number | string | boolean | null)[] = l;

聯合類型

  • 當我們想定義的某個資料變數可以為多種類型時,就可以使用聯合類型,使用的方法是用符號「|」來定義即可。
funciton cp(p:string | number): string | number{
    if(typeof p === 'number'){
        return p + p;
    }else {
        return p + p;
    }
}
console.log(cp(3));   //6
console.log(cp('Hello'))   //HelloHello
  • 這段程式中cp函數的參數類型就是一個聯合類型,其參數可以是string或number,但只能是其中一個。

交叉類型

  • 交叉類型的語法使用「&」符號定義,與聯合類型不同,交叉類型表示的是當前變數同時滿足多個類型。通常較常用交叉類型在使用介面時。
interface Shape {
    area(): number
}
interface Color {
    color: string
}
class RedCircle implements Shapr, Color{
    radius: number
    color = 'red'
    constructor(radius:number) {
        this.radius = radius;
    }
    area(): number {
        return this.radius * this.radius * 3.14;
    }
}
var c:shape & Color = new RedCircle(2);
console.log(c.color, c.area());

今天的內容就到這邊為止,明天將會介紹TypeScript的類型區分能力及其他更多內容。


上一篇
Day 14
下一篇
Day 16
系列文
從零開始學習TypeScript、Vue.js !!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言