日々精進

新しく学んだことを書き留めていきます

typescriptのEnumにメソッドを定義する

正確にはEnumにメソッドがはえたように見せる、だけど。。 以下のように、Enumと同じ名前のnamespaceを定義し、そこにメソッドを定義することで Enumにメソッドを定義したように見せられる。

enum Weekday {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}
namespace Weekday {
    export function isBusinessDay(day: Weekday) {
        switch (day) {
            case Weekday.Saturday:
            case Weekday.Sunday:
                return false;
            default:
                return true;
        }
    }
}

const mon = Weekday.Monday;
const sun = Weekday.Sunday;
console.log(Weekday.isBusinessDay(mon)); // true
console.log(Weekday.isBusinessDay(sun)); // false

これは思いつかなかった。てかTSのEnumが貧弱すぎて困る。。このぐらい元々出来て欲しい。

参考: https://basarat.gitbooks.io/typescript/docs/enums.html