LoginSignup
3
6

More than 5 years have passed since last update.

ReactNative に TypeScript を導入してみました

Last updated at Posted at 2018-12-19

React Native(0.57.8) に TypeScript を導入してみた

基本的にはMicrosoftの説明を見ればできますが、コンパイルにエラーが発生するので備忘録的に書こうと思います。

プロジェクトの初期化

ここは公式サイトそのままです。

react-native init MyAwesomeProject
cd MyAwesomeProject

TypeScriptの追加

  • モジュールの追加
    ここも公式サイトそのままです。
yarn add --dev typescript
yarn add --dev react-native-typescript-transformer
yarn tsc --init --pretty --jsx react
touch rn-cli.config.js
yarn add --dev @types/react @types/react-native
  • tsconfig.json の修正(公式サイトの修正)
    コメントアウトされているところを下記のように外します。
tsconfig.json 
{
  ...
   "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
  ...
}
  • tsconfig.jsonの修正(コンパイルエラーをなくすためにしたこと)
    allowSyntheticDefaultImportsの修正だけでも動くことには動くが、コンパイルエラーとなるため 下記のような設定を追加しました。
tsconfig.json 
{
  ...
  "target": "es2015",
  "module": "es2015",
  "lib": ["es2015"], 
  "moduleResolution": "node",
  ...
}
  • rn-cli.config.jsの修正(公式サイト通りに)
    公式サイトの通りに下記を追加します。
rn-cli.config.js
module.exports = {
  getTransformModulePath() {
    return require.resolve("react-native-typescript-transformer");
  },
  getSourceExts() {
    return ["ts", "tsx"];
  }
};

TypeScriptへの移行(公式サイトそのまま)

  • App.js を App.tsxに変更します。
  • import React, { Component } from 'react'を以下のように書き換えます。
import React from 'react'
import { Component } from 'react';

Jestの切り替え

  • 下記のコマンドを叩き、Jestを導入します。
yarn add --dev ts-jest
  • package.jsonのJest部分を書き換えます。
package.json
"jest": {
  "preset": "react-native",
  "moduleFileExtensions": [
    "ts",
    "tsx",
    "js"
  ],
  "transform": {
    "^.+\\.(js)$": "<rootDir>/node_modules/babel-jest",
    "\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest/preprocessor.js"
  },
  "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$",
  "testPathIgnorePatterns": [
    "\\.snap$",
    "<rootDir>/node_modules/"
  ],
  "cacheDirectory": ".jest/cache"
}

typesモジュールの追加

yarn add --dev @types/jest @types/react @types/react-native @types/react-test-renderer

yarn tsc

コンパイルをするとエラーが出てこなくなるはずです。

option

今のままだと、tsxがプロジェクト直下に存在し、jsファイルがその場に出来上がってしまうので、任意で以下の修正を加える。

  • srcフォルダを作成して、App.tsxを移動させる。
  • tsconfig.jsonに以下の3行を加える。
tsconfig.json
{
  "compilerOptions": {
    ...
    "outDir": "./artifact/",  /* jsファイルの生成場所を指定 */
    "rootDir": "./src/", /* コンパイル箇所の指定 */
    ...
  },
  "include": ["./src/*.tsx","./src/**/*.tsx"]
}

これでフォルダの階層が汚れないです。(完全なる好みですが、、)
これで気分良くアプリをスタート!

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6