ask-sdkを参考にFactory / BuilderをTypeScriptでやってみた
聞いたことはあったけど、作ったことがなかったのでやってみました。TypeScript Advent Calendar 2018の未投稿日があったので、そこを埋める記事になればです。 Interface Builderの型 […]
広告ここから
広告ここまで
目次
聞いたことはあったけど、作ったことがなかったのでやってみました。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を返してるので、メソッドチェーン形式で動かせてます。