LoginSignup
3
2

More than 5 years have passed since last update.

ES6でenum(列挙型)を実現する

Posted at

es6には標準でenumがないため、自前でenum風のクラスを作ってみたいと思います。
今回はhttpリクエストのメソッドを列挙型で表現します。

定義

class HTTP_METHOD {
    static get get() {
        return HTTP_TYPE_OBJECT.get;
    }

    static get post() {
        return HTTP_TYPE_OBJECT.post;
    }

    static get put() {
        return HTTP_TYPE_OBJECT.put;
    }

    static get delete() {
        return HTTP_TYPE_OBJECT.delete;
    }

    get string() {
        switch (this) {
            case HTTP_TYPE.get:
                return 'GET';
            case HTTP_TYPE.post:
                return 'POST';
            case HTTP_TYPE.put:
                return 'PUT';
            case HTTP_TYPE.delete:
                return 'DELETE';
            default:
                return null
        }
    }
}

const HTTP_METHOD_OBJECT = {
    get: new HTTP_TYPE(),
    post: new HTTP_TYPE(),
    put: new HTTP_TYPE(),
    delete: new HTTP_TYPE(),
};

使い方

HTTP_METHODは直接newしてインスタンスを作ってはいけません。
必ずstaticメソッドを使って該当のHTTP_METHODを取得してください。

function postSome() {
    let postUrl = "https://hoge/post"
    let param = {
        hoge: "hoge"
    }
    request(postUrl, HTTP_METHOD.post, param)
}

function getSome() {
    let postUrl = "https://hoge/get"
    let param = {
        hoge: "hoge"
    }
    request(postUrl, HTTP_METHOD.get, param)
}

function request(url, method, param) {
    switch (method) {
            case HTTP_METHOD.post:
            case HTTP_METHOD.delete:
            case HTTP_METHOD.put:
                fetch(url, {
                    method: method.string,
                    body: JSON.stringify(param),
                });
                break;
            case HTTP_METHOD.get:
                searchParamsString = "";
                Object.keys(params).forEach((key) => {
                    searchParamsString += key + "=" + params[key] + "&";
                });
                searchParamsString = searchParamsString.slice(0, searchParamsString.length - 1);
                fetch(url + "?" + searchParamsString, {
                    method: method.string,
                });
        }
}
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2