わいの日記

ありがちエンジニアブログ

vue-i18n を TypeScript で静的型付けする

最近の気づきをメモがわりに。

vue(正確にはNuxt.js) + TypeScriptのプロジェクトでvue-i18nを導入して国際化対応しました。

vue-i18nのセットアップは公式をご参照ください。
https://kazupon.github.io/vue-i18n/


内容は実際とは違いますが、
やろうとしたことの大筋はこんなです。

// テキトーに言語セットを用意しておく
const messages = {
  en: {
    message: {
      hello: 'hello world'
    }
  },
  ja: {
    message: {
      hello: 'こんにちは、世界'
    }
  }
};


// App.vue 
export default class App extends Vue {
  message!: string; // messageをstringで片付け (今回のような形だと!を付けないと別のエラーが起きるので!付けてます)
  mounted () {
    this.message = this.$t('message.hello') //  'こんにちは、世界'というstringが入ってくることを想定
  }
}

上記でError起きました
f:id:exhikkii:20190420205745p:plain

エラー見ればどうってことないのですが、型がstringじゃないんですね
以下のようにすれば大丈夫です

import { TranslateResult } from 'vue-i18n'

export default class App extends Vue {
  message!: TranslateResult;
  mounted () {
    this.message = this.$t('message.hello')
  }
}


最近、vueよりもReact + TypeScriptが楽しい