2025/01/24 kansai.ts #9 小原 一哉
みなさん、JavaScript でこんなことありませんか?
function hello() { const message = `* インデント付きのメッセージ 1. リストA 2. リストB * ネスト * アイテムその2 `; console.log(message); }
改行含む文字列を埋め込むとき、ソースコードの見た目が汚い!
indent を解除する という意味合いの dedent というツールがある(おそらく造語)
Python の組み込み関数らしい…。
function hello() { const message = dedent` * インデント付きのメッセージ 1. リストA 2. リストB * ネスト * アイテムその2 `; console.log(message); }
↓
* インデント付きのメッセージ 1. リストA 2. リストB * ネスト * アイテムその2
他にもいろいろある
そもそも `` で囲むのって? → JavaScript の テンプレートリテラル
``
改行文字と埋め込み式が扱えるようになった新しい文字列リテラル (というような説明はおそらく正しくないがそう言う認識で大丈夫なはず)
const n = 1; const message = `1行目 2行目 ${n * 10} `;
`` の前にくっついてるのって? → タグ付きテンプレート
タグ関数 = テンプレートリテラルの前にくっついている関数 = テンプレートリテラルと埋め込み式の値を受け取って新しい値を返す関数
const doc = html`<!DOCTYPE html> <html> ${body} </html>`;
タグ付きテンプレートによって独自の構文を JavaScript 中に埋め込んだりできる
tag`\u{0041}`
A
\u{0041}
String.raw
// lib.es5.d.ts interface TemplateStringsArray extends ReadonlyArray<string> { readonly raw: readonly string[]; } // 多分こんな感じ type TagFunction = ( // 埋め込み式で区切られたテンプレートリテラルが順に入ってる配列 strings: TemplateStringsArray, // 残りの引数に埋め込み式の値が順に入っている ...args: unknown[] ) => unknown;
dedent
ts-dedent
npm: dedent
npm: ts-dedent
multiline-ts
npm: multiline-ts
@qnighy/dedent
npm: @qnighy/dedent, Zenn: テンプレートリテラルよもやま話 & dedent ライブラリ
ここまでに紹介したものを含むいくつかの実装を読んだ感想より、