CreateReactアプリでTypescriptを使用する方法
序章
Create React App は、Reactアプリケーションの構築を開始するための基本的なパッケージと構成のセットを提供します。 バージョン2.0では、公式のTypeScriptサポートが導入されました。 これにより、JavaScriptユーザーはReactフロントエンドフレームワークでTypeScript規則を使用して記述できるようになりました。 TypeScriptは、より安全で自己文書化されたコードを作成するのに役立つ強力なツールであり、開発者がバグをより早く発見できるようにします。
この記事では、Create React Appを使用して、TypeScriptでReactアプリをセットアップします。
前提条件
この記事をフォローするには、次のものが必要です。
- Node.jsはローカルにインストールされます。これは、Node.jsのインストール方法とローカル開発環境の作成に従って実行できます。
- Reactにある程度精通している。 React.jsシリーズのコーディング方法をご覧ください。
- TypeScriptの規則にある程度精通している。
- コードヒントをサポートする最新のコードエディタをお勧めします。 Visual Studio Code は、IntelliSenseを介してこれを提供します。
このチュートリアルは、ノードv15.13.0、npm
v7.8.0、react-scripts
v4.0.3、react
v17.0.2、およびtypescript
v4.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: string
をmessage
に追加してみてください。 ただし、この状況で行う必要があるのは、すべての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
を作成し、それを別のファイルに移動して、タイプが他の場所に存在できるようにすることができます。
これはたくさんの文章のように見えるかもしれないので、もう少し書くことから何が得られるか見てみましょう。
このコンポーネントは、string
をmessage
パラメーターとしてのみ受け入れることを伝えました。 それでは、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トピックページで演習とプログラミングプロジェクトを確認してください。