技術とかの雑なToday I Learnedメモ

@typescript-eslint/restrict-template-expressions

@typescript-eslint/restrict-template-expressions

restrict-template-expressions | TypeScript ESLint

@typescript/eslint にこれで怒られた。

Array を template literal で使うなということらしい。

Array って template literal に使ったら普通に文字列として埋め込まれるような……?と思って Chrome の devtools でやってみたけど、

const arr = [1, 2]

console.log(`arr: ${arr}`) //=> arr: 1,2

という出力になり、これダメなの……?という悲しい気持ちに。

ドキュメントには allowNumber や allowBoolean など、特定の型は許可するように設定できるということが書いてあったが Array はダメらしかった。そんな、 any ですら allowAny と許されているのに……

今回は string | string[] な Array を template literal に埋め込みたい。

string の場合はそのまま埋め込めるが Array の場合は禁止されている。

なので、仮に Array の要素をすべてそのまま埋め込みたいのであれば arr.toString() でよさそう。

もし Array の内容を考慮したいのであれば Array.isArray(arr) で Array か判定したあとに arr.join(' ') のような形で処理するしかなさそう。

hoge.toString() のような形であれば string | string[] のどちらの場合でも toString() という関数を呼び出せる(String.prototype,toString())

前は String クラスに toString() なんているの?と思っていたが、インターフェースを揃えるというか、こういうところで役立つんだなとふと思ったりした。