WP-KyotoHome (日本語)Home (English)AboutPrivacy policyLicensesGitHub
JavaScriptNode.jsTypeScript

ask-sdkを参考にFactory / BuilderをTypeScriptでやってみた

聞いたことはあったけど、作ったことがなかったのでやってみました。TypeScript Advent Calendar 2018の未投稿日があったので、そこを埋める記事になればです。

Interface

Builderの型を定義します。
今回はTitleとTextをaddして、getItemでデータを取ってくるという簡単構造です。

builder.ts

export interface Response {
    title?: string,
    text?: string
}
export interface MyfirstBuilder {
    addTitle(title: string) : this
    addText(text: string): this
    getItem(): Response
}

factory.ts

Interfaceを定義したので、実装します。

import { MyfirstBuilder, Response } from './builder'

export class MyFirstFactory {
    public static init(): MyfirstBuilder {
        const content: Response = {}
        return {
            addText(text: string): MyfirstBuilder {
                content.text = text
                return this
            },
            addTitle(title: string): MyfirstBuilder {
                content.title = title
                return this
            },
            getItems(): Response {
                return content
            }
        }
    }
}

index.ts

作ったので、使いましょう。

import { MyFirstFactory } from './factory'

const first = MyFirstFactory.init()
first.addTitle('aaa')
first.addText('bbb')
console.log(first.getItem()))
// { title: 'aaa', text: 'bbb' }

const second = MyFirstFactory.init()
console.log(second.addTitle('aaa').addText('bbb').getItem())
// { title: 'aaa', text: 'bbb' }

returnでthisを返してるので、メソッドチェーン形式で動かせてます。

GitHubHomeEnglish