ホームページ > ウェブフロントエンド > jsチュートリアル > TypeScriptとの反応:ベストプラクティス

TypeScriptとの反応:ベストプラクティス

Lisa Kudrow
リリース: 2025-02-10 13:42:10
オリジナル
891 人が閲覧しました

TypeScriptとの反応:ベストプラクティス

ReactとTypeScriptは、最近多くの開発者が使用する2つの素晴らしいテクノロジーです。物事を行う方法を知ることはトリッキーになる可能性があります。また、正しい答えを見つけるのが難しい場合があります。心配しないでください。あなたが持っているかもしれない疑いを明確にするために、私たちはベストプラクティスと例をまとめました。

飛び込みましょう!

キーテイクアウト

    安全性の強化のためのタイプスクリプトを活用:タイプスクリプトを使用して、コンパイル時にエラーをキャッチすることにより、コードの安全性、予測可能性、および開発者の生産性を向上させる静的タイピングの恩恵を受けるために、タイプスクリプトを活用してください。
  • タイプスクリプトを効率的に構成する:堅牢な `tsconfig.json`セットアップから始めて、「strict」、「noemit」、「esmoduleinterop」などのオプションを有効にして、ベストプラクティスを実施し、モジュールとコンピレーションを単純化します。
  • ESLINTとTHETTIERの統合:TypeScript Parserを使用してESLINTをセットアップし、一貫したコードフォーマットのためにきれいにします。これは、特にチーム環境でコードの品質と一貫性を維持するのに役立ちます。
  • フックを使用してタイプスクリプトを使用する:TypeScriptの機能を活用して、クリーンで安全なコードのためのReactフックのタイプを推測します。ジェネリックとユニオンタイプを使用して、複雑な状態論理を処理します。
  • プロップと状態のタイプと状態を正確に:タイプスクリプトインターフェイスまたはタイプを使用してコンポーネントのプロップと状態を定義して、コンポーネントが正しいデータを受け取るようにし、コンポーネントの信頼性と保守性を高めます。
  • プロジェクトのセットアップにベストプラクティスを採用:初期セットアップのためにTypeScriptテンプレートを使用してCreate React Appを使用して、Sensibleデフォルトでプロジェクトを迅速に開始し、タイプスクリプト向けに最適化された構成をビルドします。
  • どのように反応とタイプスクリプトが一緒に機能するか
  • 開始する前に、ReactとTypescriptがどのように連携するかを再検討しましょう。 Reactは「ユーザーインターフェイスを構築するためのJavaScriptライブラリ」であり、TypeScriptは「Plain JavaScriptにコンパイルするJavaScriptのタイプされたスーパーセット」です。それらを一緒に使用することにより、基本的にjavascriptのタイプ付きバージョンを使用してUIを構築します。
  • 一緒に使用できる理由は、UIに静的にタイプされた言語(TypeScript)の利点を取得することです。これは、より多くの安全性とフロントエンドへの輸送の少ないバグを意味します。
  • 型は私のReactコードをコンパイルしますか?

レビューするのに常に良い質問は、TypeScriptがReactコードをコンパイルするかどうかです。タイプスクリプトの動作方法は、この相互作用に似ています:

ts:「ねえ、これはあなたのすべてのUIコードですか?」

反応:「うん!」

TS:「クール!私はそれをコンパイルし、あなたが何も見逃さないようにします。」

反応:「私にはいいですね!」

答えはイエスです、そうです!しかし、その後、tsconfig.jsonの設定をカバーすると、ほとんどの場合、「noemit」:trueを使用する必要があります。これが意味することは、タイプスクリプトがコンパイル後にJavaScriptを放出しないことです。これは、通常、TypeScriptを使用してタイプチェックを行うためです。

出力は、CRA設定で、React-Scriptsによって処理されます。 Yarn BuildとReactScriptsを実行して生産用の出力をバンドルします。

要約すると、TypeScriptはReactコードをコンパイルして、コードをタイプチェックします。 JavaScriptの出力はありません(ほとんどのシナリオで)。出力は、非タイプのReactプロジェクトにまだ似ています。

TypeScriptはReactおよびWebpackで動作できますか?

はい、タイプスクリプトはReactとWebpackで動作できます。幸運なことに、Webpackドキュメントにはそのガイドがあります。

うまくいけば、それはあなたに2人がどのように連携するかについて穏やかな復習を与えます。さて、ベストプラクティスに!

ベストプラクティス

最も一般的な質問を調査し、TypeScriptとの反応のための最も一般的なユースケースのこの便利なリストをまとめました。このようにして、この記事を自分のプロジェクトのリファレンスとして使用できます。

構成

開発の最も楽しいものの最も重要な部分の1つは、構成です。最大の効率と生産性を提供する最短時間で物事を設定するにはどうすればよいですか?以下を含むプロジェクトのセットアップについて説明します

tsconfig.json

eslint

prettier
  • vsコード拡張機能と設定。
  • プロジェクトのセットアップ
  • React/TypeScriptアプリを開始する最も迅速な方法は、TypeScriptテンプレートを使用してCreate-React-Appを使用することです。これを実行することができます:
これにより、TypeScriptとのReactの書き込みを開始するための最小限が得られます。いくつかの顕著な違いは次のとおりです

.tsxファイル拡張子

tsconfig.json
npx create-react-app my-app <span>--template typescript
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

React-App-Env.d.ts

  • TSXは「TypeScript JSX」用です。 TSCONFIG.JSONは、デフォルトが設定されているTypeScript構成ファイルです。 React-App-Env.d.tsは、React-Scriptsの種類を参照し、SVGのインポートを許可するなどに役立ちます。
  • tsconfig.json
  • 幸運なことに、最新のReact/TypeScriptテンプレートはTsconfig.jsonを生成します。ただし、開始するために最小限を追加します。以下のものと一致するように変更することをお勧めします。各オプションの目的も説明するためのコメントを追加しました:
追加の推奨事項は、React-Typescript-Cheatsheetコミュニティからのものであり、説明は公式タイプスクリプトハンドブックのコンパイラオプションドキュメントからのものです。これは、他のオプションとそれらが何をするかを学びたい場合に素晴らしいリソースです。

eslint/prettier

コードがプロジェクトまたはチームのルールに従っていることを確認するために、スタイルが一貫していることを確認するために、Eslintとよりきれいをセットアップすることをお勧めします。それらをうまく再生させるには、これらの手順に従ってセットアップしてください。

    必要な開発依存関係をインストールします。
  1. npx create-react-app my-app <span>--template typescript
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
  2. rootで.eslintrc.jsファイルを作成し、以下を追加します。
  3. <span>{
    </span>  <span>"compilerOptions": {
    </span>    <span>"target": "es5", // Specify ECMAScript target version
    </span>    <span>"lib": [
    </span>      <span>"dom",
    </span>      <span>"dom.iterable",
    </span>      <span>"esnext"
    </span>    <span>], // List of library files to be included in the compilation
    </span>    <span>"allowJs": true, // Allow JavaScript files to be compiled
    </span>    <span>"skipLibCheck": true, // Skip type checking of all declaration files
    </span>    <span>"esModuleInterop": true, // Disables namespace imports (import * as fs from "fs") and enables CJS/AMD/UMD style imports (import fs from "fs")
    </span>    <span>"allowSyntheticDefaultImports": true, // Allow default imports from modules with no default export
    </span>    <span>"strict": true, // Enable all strict type checking options
    </span>    <span>"forceConsistentCasingInFileNames": true, // Disallow inconsistently-cased references to the same file.
    </span>    <span>"module": "esnext", // Specify module code generation
    </span>    <span>"moduleResolution": "node", // Resolve modules using Node.js style
    </span>    <span>"isolatedModules": true, // Unconditionally emit imports for unresolved files
    </span>    <span>"resolveJsonModule": true, // Include modules imported with .json extension
    </span>    <span>"noEmit": true, // Do not emit output (meaning do not compile code, only perform type checking)
    </span>    <span>"jsx": "react", // Support JSX in .tsx files
    </span>    <span>"sourceMap": true, // Generate corrresponding .map file
    </span>    <span>"declaration": true, // Generate corresponding .d.ts file
    </span>    <span>"noUnusedLocals": true, // Report errors on unused locals
    </span>    <span>"noUnusedParameters": true, // Report errors on unused parameters
    </span>    <span>"incremental": true, // Enable incremental compilation by reading/writing information from prior compilations to a file on disk
    </span>    <span>"noFallthroughCasesInSwitch": true // Report errors for fallthrough cases in switch statement
    </span>  <span>},
    </span>  <span>"include": [
    </span>    <span>"src/**/*" // *** The files TypeScript should type check ***
    </span>  <span>],
    </span>  <span>"exclude": ["node_modules", "build"] // *** The files to not type check ***
    </span><span>}
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
  4. よりきれいな依存関係を追加します:
  5. <span>yarn add eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-react --dev
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
  6. ルートで.prettierrc.jsファイルを作成し、以下を追加します。
  7. module<span>.exports =  {
    </span>  <span>parser:  '@typescript-eslint/parser',  // Specifies the ESLint parser
    </span>  <span>extends:  [
    </span>    <span>'plugin:react/recommended',  // Uses the recommended rules from @eslint-plugin-react
    </span>    <span>'plugin:@typescript-eslint/recommended',  // Uses the recommended rules from @typescript-eslint/eslint-plugin
    </span>  <span>],
    </span>  <span>parserOptions:  {
    </span>  <span>ecmaVersion:  2018,  // Allows for the parsing of modern ECMAScript features
    </span>  <span>sourceType:  'module',  // Allows for the use of imports
    </span>  <span>ecmaFeatures:  {
    </span>    <span>jsx:  true,  // Allows for the parsing of JSX
    </span>  <span>},
    </span>  <span>},
    </span>  <span>rules:  {
    </span>    <span>// Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
    </span>    <span>// e.g. "@typescript-eslint/explicit-function-return-type": "off",
    </span>  <span>},
    </span>  <span>settings:  {
    </span>    <span>react:  {
    </span>      <span>version:  'detect',  // Tells eslint-plugin-react to automatically detect the version of React to use
    </span>    <span>},
    </span>  <span>},
    </span><span>};
    </span>
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー
  8. .eslintrc.jsファイルを更新します:
  9. <span>yarn add prettier eslint-config-prettier eslint-plugin-prettier --dev
    </span>
    ログイン後にコピー
    ログイン後にコピー
これらの推奨事項は、ロバートクーパーによる「タイプスクリプトプロジェクトでのEslintとThe Prettierを使用」と呼ばれるコミュニティリソースからのものです。このリソースにアクセスすると、これらのルールと構成の背後にある「理由」の詳細を読むことができます。

vsコード拡張機能と設定

ESLINTとTHERTTIERを追加しました。DXを改善する次のステップは、保存でコードを自動的に修正/prettifieすることです。

最初に、ESLINT拡張子とVSコードのきれいな拡張機能をインストールします。これにより、ESLINTはエディターとシームレスに統合できます。

次に、.vscode/settings.jsonに次のことを追加して、ワークスペース設定を更新します:

これにより、VSコードが魔法を機能させ、保存するとコードを修正することができます。美しい!

これらの提案は、ロバート・クーパーによる以前にリンクされた記事「タイプスクリプトプロジェクトでのESLINTときれいなものを使用している」からも掲載されています。

module<span>.exports =  {
</span>  <span>semi:  true,
</span>  <span>trailingComma:  'all',
</span>  <span>singleQuote:  true,
</span>  <span>printWidth:  120,
</span>  <span>tabWidth:  4,
</span><span>};
</span>
ログイン後にコピー
注:React.fcの詳細については、こちらをご覧ください。React.ReactNode。

コンポーネント

Reactのコア概念の1つはコンポーネントです。ここでは、React V16.8の標準コンポーネントを参照します。これは、クラスではなくフックを使用するものを意味します。 一般的に、基本的なコンポーネントについては、多くのことが関係しています。例を見てみましょう:

ここで重要な違いに注意してください。最初の例では、機能を関数宣言

として書き込みます。

return type

にreact.nodeを注釈します。それが戻ってくるからです。対照的に、2番目の例では、A

関数式を使用します。

2番目のインスタンスは値または式の代わりに関数を返すため、

関数型

にreact.fcをreact.fcで注釈にします。関数コンポーネント」。
module<span>.exports =  {
</span>  <span>parser:  '@typescript-eslint/parser',  // Specifies the ESLint parser
</span>  <span>extends:  [
</span>    <span>'plugin:react/recommended',  // Uses the recommended rules from @eslint-plugin-react
</span>    <span>'plugin:@typescript-eslint/recommended',  // Uses the recommended rules from the @typescript-eslint/eslint-plugin
</span><span>+   'prettier/@typescript-eslint',  // Uses eslint-config-prettier to disable ESLint rules from @typescript-eslint/eslint-plugin that would conflict with prettier
</span><span>+   'plugin:prettier/recommended',  // Enables eslint-plugin-prettier and displays prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array.
</span>  <span>],
</span>  <span>parserOptions:  {
</span>  <span>ecmaVersion:  2018,  // Allows for the parsing of modern ECMAScript features
</span>  <span>sourceType:  'module',  // Allows for the use of imports
</span>  <span>ecmaFeatures:  {
</span>    <span>jsx:  true,  // Allows for the parsing of JSX
</span>  <span>},
</span>  <span>},
</span>  <span>rules:  {
</span>    <span>// Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
</span>    <span>// e.g. "@typescript-eslint/explicit-function-return-type": "off",
</span>  <span>},
</span>  <span>settings:  {
</span>    <span>react:  {
</span>      <span>version:  'detect',  // Tells eslint-plugin-react to automatically detect the version of React to use
</span>    <span>},
</span>  <span>},
</span><span>};
</span>
ログイン後にコピー

2つを覚えておくのは混乱する可能性があります。それは主に設計の選択の問題です。プロジェクトで使用することを選択した場合は、一貫して使用することを選択してください。 小道具 私たちがカバーする次のコアコンセプトは小道具です。インターフェイスまたはタイプのいずれかを使用して、小道具を定義できます。別の例を見てみましょう: タイプまたはインターフェイスに関しては、React-Typescript-Cheatsheetコミュニティが提示したガイドラインに従うことをお勧めします。

  • 「ライブラリまたは第3パーティのアンビエントタイプの定義を執筆する際に、パブリックAPIの定義に常にインターフェイスを使用します。」
  • >」
  • 「反応コンポーネントの小道具と状態にタイプを使用することを検討してください。これは、より制約されているためです。」
ディスカッションの詳細を読んで、こちらのタイプとインターフェイスを比較した便利なテーブルを見ることができます。

もう1つの例を見てみましょう。

このコンポーネントでは、小道具にタイプを使用します。各Propには、他の開発者により多くのコンテキストを提供するために、その上にリストされた短い説明があります。 ?名前の名前が付けられた後、それがオプションであることを示します。 Children PropはReact.Reactnodeを取ります。これは、コンポーネントの有効な返品値であるすべてを受け入れるためです(こちらをご覧ください)。オプションのカラープロップを説明するために、デフォルト値を破壊するときに使用します。この例では、基本をカバーし、小道具の種類を記述し、オプション値とデフォルト値の両方を使用する必要があることを示してください。

一般的には、React and TypeScriptプロジェクトで小道具を書くときは、これらのことを念頭に置いてください:
npx create-react-app my-app <span>--template typescript
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

tsdoc notation /** コメント* /。

を使用して、常にあなたの小道具に説明的なコメントを追加します

コンポーネントのプロップにタイプまたはインターフェイスを使用するかどうかは、一貫して使用します。
    小道具がオプションである場合は、適切に処理するか、デフォルト値を使用してください。
  • フック
  • 幸いなことに、タイプスクリプトタイプの推論は、フックを使用するときにうまく機能します。これは、心配することがあまりないことを意味します。たとえば、この例を見てみましょう:
タイプスクリプトは、UseState Hookで使用される値を提供します。これは、ReactとTypeScriptが一緒に機能し、美しい領域です。

ヌルの値でフックを初期化する必要があるまれな機会では、ジェネリックを利用してユニオンを渡してフックを正しく入力できます。このインスタンスを参照してください:

タイプスクリプトがフックで輝くもう1つの場所は、USERREDUCERにあり、差別された組合を利用できます。役立つ例を次に示します:
<span>{
</span>  <span>"compilerOptions": {
</span>    <span>"target": "es5", // Specify ECMAScript target version
</span>    <span>"lib": [
</span>      <span>"dom",
</span>      <span>"dom.iterable",
</span>      <span>"esnext"
</span>    <span>], // List of library files to be included in the compilation
</span>    <span>"allowJs": true, // Allow JavaScript files to be compiled
</span>    <span>"skipLibCheck": true, // Skip type checking of all declaration files
</span>    <span>"esModuleInterop": true, // Disables namespace imports (import * as fs from "fs") and enables CJS/AMD/UMD style imports (import fs from "fs")
</span>    <span>"allowSyntheticDefaultImports": true, // Allow default imports from modules with no default export
</span>    <span>"strict": true, // Enable all strict type checking options
</span>    <span>"forceConsistentCasingInFileNames": true, // Disallow inconsistently-cased references to the same file.
</span>    <span>"module": "esnext", // Specify module code generation
</span>    <span>"moduleResolution": "node", // Resolve modules using Node.js style
</span>    <span>"isolatedModules": true, // Unconditionally emit imports for unresolved files
</span>    <span>"resolveJsonModule": true, // Include modules imported with .json extension
</span>    <span>"noEmit": true, // Do not emit output (meaning do not compile code, only perform type checking)
</span>    <span>"jsx": "react", // Support JSX in .tsx files
</span>    <span>"sourceMap": true, // Generate corrresponding .map file
</span>    <span>"declaration": true, // Generate corresponding .d.ts file
</span>    <span>"noUnusedLocals": true, // Report errors on unused locals
</span>    <span>"noUnusedParameters": true, // Report errors on unused parameters
</span>    <span>"incremental": true, // Enable incremental compilation by reading/writing information from prior compilations to a file on disk
</span>    <span>"noFallthroughCasesInSwitch": true // Report errors for fallthrough cases in switch statement
</span>  <span>},
</span>  <span>"include": [
</span>    <span>"src/**/*" // *** The files TypeScript should type check ***
</span>  <span>],
</span>  <span>"exclude": ["node_modules", "build"] // *** The files to not type check ***
</span><span>}
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

出典:React-Typescript-Cheatsheet Hooksセクション

<span>yarn add eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-react --dev
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ここでの美しさは、差別された組合の有用性にあります。アクションが2つの似たようなオブジェクトの結合をどのように持っているかに注目してください。プロパティタイプは文字通りの文字列です。この文字列とタイプの文字列の違いは、値がタイプで定義されている

リテラル
module<span>.exports =  {
</span>  <span>parser:  '@typescript-eslint/parser',  // Specifies the ESLint parser
</span>  <span>extends:  [
</span>    <span>'plugin:react/recommended',  // Uses the recommended rules from @eslint-plugin-react
</span>    <span>'plugin:@typescript-eslint/recommended',  // Uses the recommended rules from @typescript-eslint/eslint-plugin
</span>  <span>],
</span>  <span>parserOptions:  {
</span>  <span>ecmaVersion:  2018,  // Allows for the parsing of modern ECMAScript features
</span>  <span>sourceType:  'module',  // Allows for the use of imports
</span>  <span>ecmaFeatures:  {
</span>    <span>jsx:  true,  // Allows for the parsing of JSX
</span>  <span>},
</span>  <span>},
</span>  <span>rules:  {
</span>    <span>// Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
</span>    <span>// e.g. "@typescript-eslint/explicit-function-return-type": "off",
</span>  <span>},
</span>  <span>settings:  {
</span>    <span>react:  {
</span>      <span>version:  'detect',  // Tells eslint-plugin-react to automatically detect the version of React to use
</span>    <span>},
</span>  <span>},
</span><span>};
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
文字列と一致する必要があることです。これは、開発者が「set_one」または「set_two」に型キーセットを持つアクションのみを呼び出すことができるため、プログラムが非常に安全であることを意味します。

ご覧のとおり、フックはReactとTypeScriptプロジェクトの性質にそれほど複雑さを追加しません。どちらかといえば、彼らはデュオにうまく貸してくれます。

一般的なユースケース

このセクションは、ReactでTypeScriptを使用するときに人々がつまずく最も一般的なユースケースをカバーすることです。これを共有することで、落とし穴を避け、この知識を他の人と共有することを願っています。 フォームイベントの取り扱い

最も一般的なケースの1つは、フォームの入力フィールドで使用されるオンチェンジを正しく入力することです。例を次に示します:

コンポーネントの小道具を拡張

npx create-react-app my-app <span>--template typescript
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

1つのコンポーネントに対して宣言されたコンポーネントのプロップを取得し、それらを別のコンポーネントで使用するように拡張したい場合があります。ただし、1つまたは2つを変更する必要があります。さて、コンポーネントのプロップ、タイプ、またはインターフェイスを入力する2つの方法をどのように調べたか覚えていますか?使用したものに応じて、コンポーネントプロップの拡張方法を決定します。まず、タイプの使用方法を見てみましょう:

インターフェイスを使用して小道具を宣言した場合、キーワードを使用して、本質的にそのインターフェイスを「拡張」しますが、1つか2つの変更を行うことができます。
<span>{
</span>  <span>"compilerOptions": {
</span>    <span>"target": "es5", // Specify ECMAScript target version
</span>    <span>"lib": [
</span>      <span>"dom",
</span>      <span>"dom.iterable",
</span>      <span>"esnext"
</span>    <span>], // List of library files to be included in the compilation
</span>    <span>"allowJs": true, // Allow JavaScript files to be compiled
</span>    <span>"skipLibCheck": true, // Skip type checking of all declaration files
</span>    <span>"esModuleInterop": true, // Disables namespace imports (import * as fs from "fs") and enables CJS/AMD/UMD style imports (import fs from "fs")
</span>    <span>"allowSyntheticDefaultImports": true, // Allow default imports from modules with no default export
</span>    <span>"strict": true, // Enable all strict type checking options
</span>    <span>"forceConsistentCasingInFileNames": true, // Disallow inconsistently-cased references to the same file.
</span>    <span>"module": "esnext", // Specify module code generation
</span>    <span>"moduleResolution": "node", // Resolve modules using Node.js style
</span>    <span>"isolatedModules": true, // Unconditionally emit imports for unresolved files
</span>    <span>"resolveJsonModule": true, // Include modules imported with .json extension
</span>    <span>"noEmit": true, // Do not emit output (meaning do not compile code, only perform type checking)
</span>    <span>"jsx": "react", // Support JSX in .tsx files
</span>    <span>"sourceMap": true, // Generate corrresponding .map file
</span>    <span>"declaration": true, // Generate corresponding .d.ts file
</span>    <span>"noUnusedLocals": true, // Report errors on unused locals
</span>    <span>"noUnusedParameters": true, // Report errors on unused parameters
</span>    <span>"incremental": true, // Enable incremental compilation by reading/writing information from prior compilations to a file on disk
</span>    <span>"noFallthroughCasesInSwitch": true // Report errors for fallthrough cases in switch statement
</span>  <span>},
</span>  <span>"include": [
</span>    <span>"src/**/*" // *** The files TypeScript should type check ***
</span>  <span>],
</span>  <span>"exclude": ["node_modules", "build"] // *** The files to not type check ***
</span><span>}
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

両方の方法が問題を解決します。どちらを使用するかを決定するのはあなた次第です。個人的には、インターフェイスを拡張することはより読みやすいと感じますが、最終的にはあなたとあなたのチーム次第です。

TypeScriptハンドブックの両方の概念について詳しく読むことができます:
<span>yarn add eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-react --dev
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

交差点タイプ

インターフェイスの拡張

  • サードパーティライブラリ
  • ApolloのようなGraphQLクライアントの場合でも、Reactテストライブラリのようなものでテストする場合でも、ReactおよびTypeScriptプロジェクトでサードパーティライブラリを使用していることがよくあります。これが発生したとき、最初にやりたいことは、型タイプスクリプトタイプ定義を備えた@Typesパッケージがあるかどうかを確認することです。実行することでこれを行うことができます:

たとえば、

jestを使用している場合は、実行してこれを行うことができます。

これにより、プロジェクトでJestを使用している場合はいつでも、タイプセーフティが追加されます。
module<span>.exports =  {
</span>  <span>parser:  '@typescript-eslint/parser',  // Specifies the ESLint parser
</span>  <span>extends:  [
</span>    <span>'plugin:react/recommended',  // Uses the recommended rules from @eslint-plugin-react
</span>    <span>'plugin:@typescript-eslint/recommended',  // Uses the recommended rules from @typescript-eslint/eslint-plugin
</span>  <span>],
</span>  <span>parserOptions:  {
</span>  <span>ecmaVersion:  2018,  // Allows for the parsing of modern ECMAScript features
</span>  <span>sourceType:  'module',  // Allows for the use of imports
</span>  <span>ecmaFeatures:  {
</span>    <span>jsx:  true,  // Allows for the parsing of JSX
</span>  <span>},
</span>  <span>},
</span>  <span>rules:  {
</span>    <span>// Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs
</span>    <span>// e.g. "@typescript-eslint/explicit-function-return-type": "off",
</span>  <span>},
</span>  <span>settings:  {
</span>    <span>react:  {
</span>      <span>version:  'detect',  // Tells eslint-plugin-react to automatically detect the version of React to use
</span>    <span>},
</span>  <span>},
</span><span>};
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
@Types名前空間は、パッケージタイプの定義用に予約されています。彼らはEnculationTypedと呼ばれるリポジトリに住んでいます。これは、タイプスクリプトチームと部分的にコミュニティによって部分的に維持されています。

これらは、私のpackage.json?

の依存関係または開発者として保存する必要があります。
<span>yarn add prettier eslint-config-prettier eslint-plugin-prettier --dev
</span>
ログイン後にコピー
ログイン後にコピー
短い答えは「依存する」です。ほとんどの場合、Webアプリケーションを構築する場合、彼らは開発の下に行くことができます。ただし、TypeScriptでReactライブラリを書いている場合は、依存関係として含めることをお勧めします。

スタックオーバーフローにはこれに対するいくつかの回答がありますが、詳細については確認できます。

@Typesパッケージを持っていない場合はどうなりますか?

npmに@Typesパッケージが見つからない場合、基本的に2つのオプションがあります。
  1. 基本宣言ファイルを追加
  2. 徹底的な宣言ファイルを追加

最初のオプションは、パッケージ名に基づいてファイルを作成し、ルートに配置することを意味します。たとえば、パッケージバナナJSにタイプが必要な場合、ルートでBanana-js.d.tsという基本的な宣言ファイルを作成できます。

npx create-react-app my-app <span>--template typescript
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
これはタイプの安全性を提供しませんが、ブロックを解除します。

より徹底的な宣言ファイルは、ライブラリ/パッケージのタイプを追加する場所になります:

<span>{
</span>  <span>"compilerOptions": {
</span>    <span>"target": "es5", // Specify ECMAScript target version
</span>    <span>"lib": [
</span>      <span>"dom",
</span>      <span>"dom.iterable",
</span>      <span>"esnext"
</span>    <span>], // List of library files to be included in the compilation
</span>    <span>"allowJs": true, // Allow JavaScript files to be compiled
</span>    <span>"skipLibCheck": true, // Skip type checking of all declaration files
</span>    <span>"esModuleInterop": true, // Disables namespace imports (import * as fs from "fs") and enables CJS/AMD/UMD style imports (import fs from "fs")
</span>    <span>"allowSyntheticDefaultImports": true, // Allow default imports from modules with no default export
</span>    <span>"strict": true, // Enable all strict type checking options
</span>    <span>"forceConsistentCasingInFileNames": true, // Disallow inconsistently-cased references to the same file.
</span>    <span>"module": "esnext", // Specify module code generation
</span>    <span>"moduleResolution": "node", // Resolve modules using Node.js style
</span>    <span>"isolatedModules": true, // Unconditionally emit imports for unresolved files
</span>    <span>"resolveJsonModule": true, // Include modules imported with .json extension
</span>    <span>"noEmit": true, // Do not emit output (meaning do not compile code, only perform type checking)
</span>    <span>"jsx": "react", // Support JSX in .tsx files
</span>    <span>"sourceMap": true, // Generate corrresponding .map file
</span>    <span>"declaration": true, // Generate corresponding .d.ts file
</span>    <span>"noUnusedLocals": true, // Report errors on unused locals
</span>    <span>"noUnusedParameters": true, // Report errors on unused parameters
</span>    <span>"incremental": true, // Enable incremental compilation by reading/writing information from prior compilations to a file on disk
</span>    <span>"noFallthroughCasesInSwitch": true // Report errors for fallthrough cases in switch statement
</span>  <span>},
</span>  <span>"include": [
</span>    <span>"src/**/*" // *** The files TypeScript should type check ***
</span>  <span>],
</span>  <span>"exclude": ["node_modules", "build"] // *** The files to not type check ***
</span><span>}
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
宣言ファイルを書いたことがない場合は、公式タイプスクリプトハンドブックのガイドをご覧ください。

要約

reactとtypeScriptを最適な方法で一緒に使用すると、情報の量が多いため、少し学習が必要ですが、長期的にはメリットが非常に報われます。この記事では、構成、コンポーネント、小道具、フック、一般的なユースケース、およびサードパーティライブラリを取り上げました。多くの個々の領域をより深く掘り下げることができましたが、これはベストプラクティスに従うのに役立つために必要な80%をカバーする必要があります。

これを実際に見たい場合は、Githubでこの例を見ることができます。

連絡を取りたい場合は、この記事に関するフィードバックを共有するか、2つのテクノロジーを一緒に使用することについてチャットしたい場合は、Twitter @jsjoeioで連絡できます。

さらに読み取り

より深く潜りたい場合は、ここに提案するいくつかのリソースがあります:

race-typescript-cheatsheet

これらの推奨事項の多くは、React-Typescript-Cheatsheetから直接来ました。反応型の何かの特定の例や詳細を探しているなら、これは行くべき場所です。貢献も歓迎します!

公式タイプスクリプトハンドブック

もう1つの素晴らしいリソースは、タイプスクリプトハンドブックです。これは、タイプスクリプトチームによって最新の状態に保たれ、言語の内側の仕組みの背後にある例と詳細な説明を提供します。

TypeScript Playground

ブラウザのタイプスクリプトコードでReactをテストできることをご存知ですか?あなたがしなければならないのは、輸入Reactだけです。これがあなたを始めるためのリンクです。

タイプスクリプトスキルを向上させるための実用的な方法

タイプスクリプトスキルを向上させるための実用的な方法に関するガイドを読んで、前進するときに継続的な学習のために自分自身を設定してください。TypeScriptとの反応に関する

faq

TypeScriptでReactを使用できますか?

es、TypeScriptでReactを絶対に使用できます。実際、ReactとTypeScriptを組み合わせることで、Web開発コミュニティでますます人気が高まっています。 TypeScriptは、強化されたツールとタイプの安全性を提供するJavaScriptの静的に型付けられたスーパーセットであり、堅牢で保守可能なReactアプリケーションを構築するための優れた選択肢となります。タイプスクリプト関数の署名。 TypeScriptを使用すると、小道具と状態の強力なタイプを定義して、ランタイムエラーのリスクを減らし、コードベースをより予測可能にすることができます。さらに、TypeScriptのオートコンプリートとタイプの最新のコードエディターのチェックは、開発中に貴重な支援を提供します。
TypeScriptでReactプロジェクトを開始するには、TypeScriptテンプレートを使用したReactアプリの作成などのツールを使用したり、既存のReactプロジェクトでタイプスクリプトを手動で構成したりできます。 TypeScriptを使用すると、Reactとの動的でインタラクティブなユーザーインターフェイスを構築しながら静的タイピングの利点を享受でき、より信頼性が高く保守可能なWebアプリケーションになります。タイプスクリプトは、Reactアプリケーションを構築するために必要ではありませんが、非常に有益な場合があります。 ReactはもともとJavaScript(ECMAScript)を使用して開発されていましたが、多くのReactアプリケーションはまだPlain JavaScriptで書かれています。 ReactはJavaScriptでシームレスに動作し、TypeScriptなしで完全に機能的で効率的なReactアプリケーションを作成できます。
ただし、TypeScriptはReactで作業するときに大きな利点を提供できます。 TypeScriptは、javaScriptの静的に型付けられたスーパーセットです。つまり、タイプの注釈とJavaScriptコードにチェックを追加します。これらのタイプの注釈は、コンパイル時にタイプ関連のエラーをキャッチでき、コードの品質と保守性が向上します。 TypeScriptは、プロップ、状態、および関数パラメーターのタイプ安全性を提供し、ランタイムエラーの可能性を減らすことにより、大きく複雑なReactコードベースをより管理しやすくすることができます。要約すると、TypeScriptはReactの要件ではなく、Reactを効果的に使用できます。プレーンJavaScriptを使用。ただし、タイプチェックを追加してコードの予測可能性を改善することにより、タイプスクリプトが開発エクスペリエンスを向上させることができ、特により大きく複雑なプロジェクトで堅牢で保守可能なアプリケーションを構築するための貴重な選択肢になります。

React AppsでTypeScriptを使用する方法は?>

TypeScriptを使用して新しいReactプロジェクトをセットアップすることから始めます。 TypeScriptテンプレートを使用したCreate React Appなどのツールを使用したり、既存のReactプロジェクトでTypeScriptを手動で構成できます。

次に、TypeScriptを使用してReactコンポーネントを書きます。 TypeScript関数の署名を使用して機能コンポーネントを作成したり、クラスコンポーネントにTypeScriptクラスを使用したりできます。 TypeScriptを使用すると、プロップタイプと状態タイプを指定して、コードエディターで強力なタイプのチェックとオートコンプリートサポートを提供できます。 Reactアプリでサードパーティライブラリまたはパッケージを使用している場合は、それらの依存関係のタイプスクリプトタイプ定義を必ずインストールしてください。多くの一般的なライブラリには、間違いなく利用可能なコミュニティにメンテナンスされたタイプスクリプトタイプの宣言がありますReact.js(JavaScript):React.jsは、一般にReactと呼ばれ、ユーザーインターフェイスを構築するために設計されたJavaScriptライブラリです。 React.jsを使用する場合、開発者は通常、Plane JavaScriptでアプリケーションを書き込み、ES6やES7などの最新のJavaScript機能を活用します。 React.jsの顕著な特徴の1つは、デフォルトで厳格なタイピングを強制しないことです。その結果、開発者は、タイプ検証とエラー検出のためのランタイムチェックとプロパティなどのツールに依存しています。発達。 React TypeScriptを使用すると、開発者はTypeScriptの構文を使用してReactコンポーネントを書き込みます。このアプローチは、開発中の静的タイプチェック、つまり大きな利点を提供します。 TypeScriptは、開発者がプロ​​ップ、状態、およびその他のデータのタイプとインターフェイスを定義できるようにします。これにより、ランタイムではなくコンパイル時にタイプ関連のエラーをキャッチできます。これにより、コードの品質の向上、コードの予測可能性の向上、ランタイムエラーの減少につながります。

要約すると、React.jsはユーザーインターフェイスを構築するためのJavaScriptライブラリです。タイプの安全性と開発サポート。 React.jsとReact Typescriptの選択は、プロジェクトの要件、開発者の好み、および特定のアプリケーションの静的タイピングの重要性に依存します。どちらのオプションも有効であり、Webアプリケーションとユーザーインターフェイスの開発で広く使用されています。

タイプスクリプトとの反応を開始する必要がありますか?

TypeScriptまたはJavaScriptを使用してReactプロジェクトを開始することは、さまざまな考慮事項に依存します。開発ツール。 TypeScriptの静的タイプチェックは、コンパイル時にエラーをキャッチするのに役立ち、より堅牢で保守可能なコードにつながります。かなりのプロジェクトまたは複雑なプロジェクトに取り組んでいる場合、TypeScriptはバグを防止し、コードベースを管理しやすくするのに特に有益です。 TypeScriptは、チーム内のコードの読みやすさとコラボレーションを改善できるタイプ定義を通じて強化されたコードドキュメントも提供します。 JavaScriptはより軽量で、学習曲線が短く、セットアップと開始が迅速になります。チームがTypeScriptの経験がない場合、またはプロジェクトの要件が強力なタイピングを必要としない場合、JavaScriptは実用的な選択である可能性があります。さらに、JavaScriptエコシステムは、ライブラリとリソースの広範なコレクションを誇っているため、プロジェクトのソリューションとサポートを簡単に見つけることができます。

以上がTypeScriptとの反応:ベストプラクティスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート