iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
0
Modern Web

從零開始進入 JavaScript & TypeScript 的世界系列 第 7

第07天-介面

在 TypeScript 中,它的介面概念其實跟 Java 或 CSharp 差不多,我們先來看看它可以幫助我們解決什麼問題。

首先,假設我有一個 function 如下:

let calculateArea(width, length) => {
    // ...
}

這個 function 看起來還不算太糟糕,但如果遇到一些更複雜的狀況,例如:

let calculateArea(width, length, a, b, c, d) {
    // ...
}

這時候參數變多了,就會讓這個 function 變成一個很糟糕的設計,這時候我們就會想說把所有的同一概念的參數給封裝在一起,成為一個概念。以上面的例子(只有 length 和 width 那個例子),我們可以這樣做

let calculateArea(rectangle) {
    // ...
}

calculateArea({
    width: 10,
    length: 14
})

這樣一來如果參數變多了,但他們又是同一個概念,就好像好多了。不過,這樣還是會有一個問題。如果我這樣呼叫:

calculateArea({
    radius: 10,
    name: "9527"
})

編譯可能會過,但執行到這裡的時候就會出錯了。所以我們可以用一個方式解決這個問題,就是我們在前面提到的加上型別,這樣編譯器就會幫我們檢查了,萬一呼叫時給錯,就不會等到直行到那行時才會知道。

let calculateArea(rectangle: { width: number, length: number }) => {
    // ..
}

好,那重點來了,如果我有很多地方都會用到 { width: number, length: number } 這個概念呢?這樣每個地方都要寫一遍,就會變得很不好維護。這時候我們就可以利用 interface 來解決這個問題。

這時候我們的主角 interface 就可以登場了,它可以這樣寫:

interface Rectangle {
    width: number,
    length: number
}

// 我們的參數就可以用上述這個 interface 替代
let calculateArea(rectangle: Rectangle) => {
    // ...
}

// 在呼叫時,也是用一樣的方式
calculateArea({
    width: 12,
    height: 10
})

上面那個程式碼中 Rectangle 是 interface 的名字,如果有很多地方都會用到 Rectangle,我們就可以用這個 interface 而不用在寫一堆參數名稱和型別了。


上一篇
第06天-函式
下一篇
第08天-類別
系列文
從零開始進入 JavaScript & TypeScript 的世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言