CreateReactアプリでTypescriptを使用する方法

提供:Dev Guides
移動先:案内検索

序章

Create React App は、Reactアプリケーションの構築を開始するための基本的なパッケージと構成のセットを提供します。 バージョン2.0では、公式のTypeScriptサポートが導入されました。 これにより、JavaScriptユーザーはReactフロントエンドフレームワークでTypeScript規則を使用して記述できるようになりました。 TypeScriptは、より安全で自己文書化されたコードを作成するのに役立つ強力なツールであり、開発者がバグをより早く発見できるようにします。

この記事では、Create React Appを使用して、TypeScriptでReactアプリをセットアップします。

前提条件

この記事をフォローするには、次のものが必要です。

このチュートリアルは、ノードv15.13.0、npm v7.8.0、react-scripts v4.0.3、react v17.0.2、およびtypescriptv4.2.3で検証されました。 。

TypeScriptCreateReactアプリの起動

まず、ターミナルウィンドウを開き、プロジェクトをビルドするディレクトリに移動します。

次に、create-react-app--template typescriptフラグとともに使用します。

npx create-react-app cra-typescript-example --template typescript

ターミナルウィンドウに最初のメッセージが表示されます。

Creating a new React app in [..]/cra-typescript-example.

Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts with cra-template-typescript...

--template typescriptフラグは、 cra-template-typescripttemplateを使用してビルドするようにCreateReactAppスクリプトに指示します。 これにより、メインのTypeScriptパッケージが追加されます。

注: Create React Appの以前のバージョンでは、--typescriptフラグを使用できましたが、このオプションは廃止されました。


インストールが完了すると、TypeScriptをサポートする新しいReactアプリケーションが作成されます。 プロジェクトディレクトリに移動し、コードエディタで開きます。

tsconfig.jsonファイルを調べる

ターミナルウィンドウに次のメッセージが表示されていることに気付いたかもしれません。

We detected TypeScript in your project (src/App.test.tsx) and created a tsconfig.json file for you.

Your tsconfig.json has been populated with default values.

tsconfig.jsonファイルは、JavaScriptプロジェクトのpackage.jsonと同様に、TypeScriptプロジェクトの構成に使用されます。

Create ReactAppによって生成されるtsconfig.jsonは、次のようになります。

tsconfig.json

{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx"
  },
  "include": [
    "src"
  ]
}

この構成により、コンパイル先のECMAScriptのいくつかのコンパイルルールとバージョンが確立されます。

App.tsxファイルを調べる

それでは、App.tsxファイルを開いてみましょう。

src / App.tsx

import React from 'react';
import logo from './logo.svg';
import './App.css';

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.tsx</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}

export default App;

以前にCreateReactAppを使用したことがある場合、これはCreateReactAppがTypeScript以外のビルド用に生成するApp.jsファイルと非常によく似ていることに気付いたかもしれません。 JavaScriptプロジェクトと同じベースを取得しますが、TypeScriptサポートが構成に組み込まれています。

次に、TypeScriptコンポーネントを作成し、それが提供できる利点を調べてみましょう。

TypeScriptコンポーネントの作成

App.tsxファイルに機能コンポーネントを作成することから始めます。

function MyMessage({ message }) {
  return <div>My message is: {message}</div>;
}

このコードは、propsからmessageの値を取ります。 divをテキストMy message is:message値でレンダリングします。

次に、TypeScriptを追加して、この関数にmessageパラメーターをstringにする必要があることを伝えましょう。

TypeScriptに精通している場合は、message: stringmessageに追加してみてください。 ただし、この状況で行う必要があるのは、すべてのpropsのタイプをオブジェクトとして定義することです。

これを達成する方法はいくつかあります。

タイプをインラインで定義する:

function MyMessage({ message }: { message: string }) {
  return <div>My message is: {message}</div>;
}

propsオブジェクトの定義:

function MyMessage(props: { message: string }) {
  return <div>My message is: {props.message}</div>;
}

別のインターフェースを使用する:

interface MyMessageProps {
  message: string;
}

function MyMessage(props: MyMessageProps) {
  return <div>My message is: {props.message}</div>;
}

interfaceを作成し、それを別のファイルに移動して、タイプが他の場所に存在できるようにすることができます。

これはたくさんの文章のように見えるかもしれないので、もう少し書くことから何が得られるか見てみましょう。

このコンポーネントは、stringmessageパラメーターとしてのみ受け入れることを伝えました。 それでは、Appコンポーネント内でこれを使用してみましょう。

TypeScriptコンポーネントの使用

このMyMessageコンポーネントをレンダリングロジックに追加して、使用してみましょう。

コンポーネントの入力を開始します。

<MyMessage

コードエディタがコードヒントをサポートしている場合は、コンポーネントの入力を開始すると、コンポーネントの署名が表示されることに気付くでしょう。

これにより、コンポーネントに戻ることなく、期待される値とタイプが提供されます。 これは、別々のファイルで複数のコンポーネントを処理する場合に特に便利です。

小道具の種類を調べる

次に、小道具の入力を開始します。

<MyMessage messa

messageと入力し始めるとすぐに、その小道具がどうあるべきかがわかります。

(JSX attribute) message: stringが表示されます。

タイプエラーの調査

文字列の代わりにmessageの数値を渡してみてください。

<MyMessage message={10} />

メッセージとして数字を追加すると、TypeScriptはエラーをスローし、これらの入力のバグを見つけるのに役立ちます。

次のようなタイプエラーがある場合、Reactはコンパイルすらしません。

Type 'number' is not assignable to type 'string'が表示されます。

結論

このチュートリアルでは、Create React Appを使用して、TypeScriptでReactアプリをセットアップします。

すべてのコンポーネントと小道具のタイプを作成できます。 最新のコードエディタを使用すると、コードヒントを利用できます。 また、TypeScriptではプロジェクトをタイプエラーでコンパイルすることさえできないため、エラーをより迅速にキャッチできます。

TypeScriptの詳細については、TypeScriptトピックページで演習とプログラミングプロジェクトを確認してください。