EP 1: Bootstrapping a React Native Typescript App

ยท

7 min read

EP 1: Bootstrapping a React Native Typescript App

Cover Image Credits: Photo by Muhammad Rosyid Izzulkhaq

For Javascript developers out there, I'm certain we've all heard about the popular kids on the block. I'm talking about React Native (A Cross-platform mobile app development library) and Typescript (A Javascript superset with static typing).

If you haven't heard about Typescript, here's a blog post that serves as an Introduction to Typescript and its Basic Types.

Prerequisite

  1. A basic understanding of Javascript and React
  2. Has already setup development environment for React Native, otherwise, refer to the React Native Environment Setup Guide

Introduction

In this post, we will begin our building-in-public series, where we will learn how to initialize a new React Native project with Typescript support.

We will focus on initializing a sample application with all its project files.

Without further ado, let's get started!

Initialize a new React Native App

  • Cd into a folder where you want to create your application.

For me, that folder is projects.

When you're inside the folder, run the command below to create a new react native application with typescript support:

react-native init truth --template react-native-template-typescript

The command above uses the official react-native-cli to create a new application called truth and installs a template with typescript support. You must have the react-native-cli package installed globally on your machine for the code above to work.

If you don't want to install the react-native-cli global package you can run the code below to get the same results. Like this:

npx react-native init truth --template react-native-template-typescript
  • Cd into the app project directory.
cd truth

The code above enables us to navigate into the newly created app folder.

  • Open the application in your code editor of choice.

The application folder structure should look like this:

rn-folder-structure.png

Finalize configuration

If you look at the project structure image above, you will see that we have a tsconfig.json file. This is the file where our typescript configurations live in.

Before we proceed to run our app, we will have to add custom path mappings for our project to make it easier for folder access and navigation.

To do this:

  • Open the tsconfig.json file, find the lines of code that look like these that have been commented out:
    "baseUrl": './',
    "paths": {},
    
  • Uncomment the baseUrl line, and replace the paths line with the following code:
    "paths": {
    "*": ["src/*"],
    "tests": ["tests/*"],
    "@components/*": ["src/components/*"],
    },
    

What we're doing here is setting the base URL path to be the project root folder and adding paths that will automatically resolve to the ones we added in the code above.

The * path sets the base path for the src folder which we will create later. The src folder is where all our code files for the application will live in.

The tests path tells typescript to read every file that lives in the tests folder. Useful when running tests.

The @components/* path is to read every file in the components folder. We will create this folder in the future as well.

  • Add babel-plugin-module-resolver to our project dependency to resolve our custom path mappings.

Run the code below in the terminal of your application root folder

npm install -D babel-plugin-module-resolver

This should add the babel-plugin-module-resolver to your package.json development dependencies.

  • Locate and update the babel.config.js file

When you open thebabel.config.js file in your project root directory, you'll find a file that looks like this:

module.exports = {
  presets: ['module:metro-react-native-babel-preset'],
};

Add the code below right after the line with the presets configuration:

plugins: [
  [
    'module-resolver',
    {
      root: ['./src'],
      extensions: ['.ios.js', '.android.js', '.js', '.ts', '.tsx', '.json'],
      alias: {
        tests: ['./tests/'],
        '@components': './src/components',
      },
    },
  ],
],

This configuration makes it possible for babel to resolve the typescript configurations we added earlier.

Now we can proceed to run our application and try it out.

Running our Application (Android)

To run our newly created application, we will use an android emulator available to us from Android Studio to test the android version of our app.

Step 1

Startup your emulator of choice. Make sure you have a virtual device running.

If you're using Android Studio, you can check this by typing the following code in your terminal:

adb devices

This will show you a list of devices available to use to run your app.

Step 2

Open the package.json file in your project root directory and observe the 'scripts' available.

To start our application, run the code below in your terminal:

npm run android

This will run the "android" command in the "scripts" section of your package.json file which will run and install the application on our virtual device.

After the application has finished installing on the virtual device. You should see the demo application open on the virtual device that looks like the image below.

truth-emulator.png

Resources:

  1. If you're not familiar with Android Studio, learn more about it on the Official Android Studio Documentation.
  2. For a more in-depth approach to running a React Native application, refer to the Official React Native Documentation.

Conclusion

Voila! ๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰

You just created and set up a React Native application with Typescript support from scratch.

Next, we will setup Authentication/Authorization routes for our application using React Navigation.

Thank you and see you in the next post.