🧵
JavaScriptのタグ付きテンプレートを使ってpath.joinをスマートにやる
JavaScriptでファイルなどのパスを連結するとき、Node.jsのpath.join
関数を使うことが多いと思います。単純な文字列連結でも良いですが、デミリタ(多くの場合は/)の重複やプラットフォームの差異などを考えるとpath.join
を使うのが良いです。
ところが、ついつい`${someDir}/foo/bar/${fileName}`
のように書きたくなってしまいます。
path.join(someDir, 'foo/bar', fileName)
と書くのは少々面倒に感じるというか、やや直感的ではない感じがします。
そこで、Tagged Template Literalを使って、スマートに書ける書き方を考えてみました。
まず、joinという関数を定義します。
import path from 'path'
function join(strings: TemplateStringsArray, ...args: unknown[]): string {
return path.join(
...strings.flatMap((str, i) =>
i === 0 ? [str] : [String(args[i - 1]), str]
)
)
}
次のように使います。
const someDir = '/home/someone/test/'
const fileName = 'cool.ts'
join`${someDir}/foo/bar/${fileName}` // => /home/someone/test/foo/bar/cool.ts
以上です。
Discussion