NITS TIPS

~微塵集合知巧~

テンプレートリテラル型で引数が「/」で始まっているかチェックする

最終更新日: 2024-04-07記事投稿日: 2024-04-07

nobumitsu-1995のgithubトップ

Frontend developer

nobumitsu-1995


概要

以下のようにpathを受け取ってURLを生成する関数を作成したところ、「テンプレートリテラル型を利用することでpathに指定する値に`/fuga`を入れるか`fuga`を入れるか迷わなくなる」というレビューを受けました。

const generateUrl = (path: string) => {
  return `https://hoge/${path}`
}

テンプレートリテラル型を使う

以下のように修正しました!これでgenerateUrl関数を使用するとき`fuga`が引数に渡されたときは、型エラーが出るので迷うことがなくなります(エラーも防げる!)

pathの1文字目が「/」であるかないか判定して「/」を付与する、みたいな処理を入れてもいいがテンプレートリテラル型で簡単にエラーを防げそうなので、これで十分な気がしました!

const generateUrl = (path: `/${string}`) => {
  return `https://hoge${path}`
}

おまけ

以下のようにするともっと型安全になりそう👀(過剰な気もするが...)

const DOMAIN = 'https://hoge' as const
type GenerateUrl = (path: `/${string}`) => `${typeof DOMAIN}${typeof path}`

const generateUrl: GenerateUrl = (path) => {
  return `${DOMAIN}${path}`
}

参考文献


関連記事

  • 最終更新日: 2024-07-09記事投稿日: 2024-07-09

    PayloadとArgumentの使い分け方

    typescriptで型を宣言するとき〇〇Payloadとか××Argumentとか名付けることが多いがその違いについて真面目に考えたことがなかったので調べてみた。

  • 最終更新日: 2024-04-08記事投稿日: 2024-03-31

    丸め誤差に対応した計算方法

    コンピュータによる浮動小数点型の数値計算などで現れる丸め誤差。そんな丸め誤差に対応した数値計算のコードをjavascriptで書く方法を紹介します。

  • 最終更新日: 2024-08-06記事投稿日: 2024-08-06

    ARIA属性を活用したアクセシブルなモーダル実装

    アクセシブルなmodalを実装するために必要なaria属性が意外と多い。参考となるコードをメモとして残しておきたい。

  • 最終更新日: 2024-07-27記事投稿日: 2024-07-27

    swiper/reactで実装したカルーセルをTAB操作した時、画面に描画されていないスライドにフォーカスが当たってしまう

    swiper/reactで実装したカルーセルをTABキーで操作した時、画面に描画されていないスライドにもフォーカスが当たってしまう問題があり、それの修正対応をしたので備忘録として残しておく。