個人のWebサービスでj.sファイルを全て.tsファイルに変更するときに@rails/ujs
の型定義が提供されておらず、ちょっとハマったのでメモ📝
@rails/ujs
とは
@rails/ujs
は、ActionView内の管理されているnpm packageです。
Railsのガイドで記載されているdata-confirm
やdisable_with
といった便利機能はこのpackageを利用して実現されており、
以下のコードをapplication.jsとかに書くと使うことが出来ます。
import Rails from "@rails/ujs"; Rails.start();
.tsファイルで@rails/ujs
を利用する。
以下を単純に.jsファイルを.tsファイルに書き換えると、
import Rails from "@rails/ujs"; Rails.start();
型定義ファイルが提供されてないので以下のようなエラーが発生します。
app/javascript/packs/rails.ts:1:19 - error TS7016: Could not find a declaration file for module '@rails/ujs'. 'node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js' implicitly has an 'any' type. Try `npm i --save-dev @types/rails__ujs` if it exists or add a new declaration (.d.ts) file containing `declare module '@rails/ujs';` 1 import Rails from "@rails/ujs";
以下のようなrails-ujs.d.ts
的なファイルを配置してあげれば最低限の利用に関しては型チェックを成功させることができます。
const Rails: { start(): void; }; declare module "@rails/ujs" { export default Rails; }
以下のようなcsrfToken
を取得するといったmoduleをimportとかしたい場合には
import { csrfToken } from "@rails/ujs";
型定義を追加してあげれば大丈夫です。
const Rails: { start(): void; }; declare module "@rails/ujs" { export default Rails; export function csrfToken(): string; }