rails-ujsをtypescriptでロードする時にエラーに

バージョン情報

  • rails-ujs 5.2.4
  • typescript 3.7.5

本題

strictモードのtypescriptは、初心者にとってはハマり所が多いですね。

さて、CSRFトークンを読み込もうとして、rails-ujsをこうやってimportした。

import {csrfToken} from 'rails-ujs'
axios.defaults.headers.common['X-CSRF-TOKEN'] = csrfToken()

そしたら、次のエラーが発生した。

TS7016: Could not find a declaration file for module 'rails-ujs'. '/project/node_modules/rails-ujs/lib/assets/compiled/rails-ujs.js' implicitly has an 'any' type.

困る。困っているので「typescript 未対応 モジュール」でググると、そのものズバリな記事が出てきた。神か。
TypeScript未対応のモジュールをimportするときのエラー対策

今回、型は割とどうでもいい部分なので、rails-ujsに関してはこのエラーは無視する方向にしたい。
かといって@ts-ignoreを書く方法だと、ファイル毎に毎回毎回書かなきゃいけない可能性があるので、d.tsで回避する方法にした。

app/javascripts/rails.d.tsを用意して、その中に次の内容を書く。

declare module "rails-ujs";

これでエラーは出なくなりました。

・・そもそも、JS側でのcsrfトークン取得は、実際の実装としてはmetaタグから読み取るだけだし、rails-ujsに頼る必要もないかもね。。。

タイトルとURLをコピーしました