どのような入力モードで厳密なモードは、なぜあなたがそれを使用する必要がありますか?


このポストは、シリーズとbook about TypeScriptの一部です.これは、ゼロからバックエンドとフロントエンド上の完全なタイプスクリプトのアプリケーションを書くことをご案内します.シリーズは、誰にでも無料でPDF電子ブックとして利用可能です.

typescript設定で使用できる多くのオプションとパラメータがあります.オプションの重要な“グループ”の一つは厳格なオプションです.これらのオプションは、安全なコードを書く能力を提供します.どうやって?タイプスクリプトは主にJavascriptのスーパーセットとして開発されたので、デフォルトでは、型やその他の面ではスーパーではないコードを書くことができます.このタイプはJavaScript開発者によって簡単に使用されるべきです.JavaScriptは静的な型を持っておらず、プログラミングの面でより柔軟です.これは多くの機能を迅速かつ簡単にコードを書くことがあります.しかし、これの反対側は、おそらくあなたのコードが安全でない場所が多いでしょう.それは、あなたのプログラムが落ちるケースの数が大きいことを意味します.タイプスクリプトは部分的にこの問題を解決します.

どのような厳しいモードですか?


あなたはおそらくJavaScript厳格モードとTypeScript厳しいモードについて聞いたかもしれません.その点は、彼らが異なる種類のものであるということです.
TypeScript Strict Modeは、TypeScriptコンパイラパラメータ(つまり、1つの“main”パラメータで表現することもできます)の束です.TypeScriptコンパイラTSCを使用すると、typescriptでコードを書く特定の規則に従うことができます.すべてのこれらの規則は、タイプスクリプトコードの型と管理タイプに直接関係しています.たとえば、ルールの1つは、常にすべての関数でパラメーターの型を書くことを強制します.
typescript“strict mode”は、1つまたは2つのパラメータで、typescript設定ファイルで有効にすることができます.それは個別に有効にすることができますまたは1つのパラメータで一度にすべてを有効にすることができるパラメータのグループです.
“主な厳格モード”パラメータはstrictと呼ばれます.これはtsconfigのコンパイラの一部です.JSONこのパラメータをtrueに設定すると、設定の特定のパラメータを自動的に設定します.もう一つの重要なニュアンスは、個々の厳密なチェックパラメータの代わりに厳密なパラメータを有効にすると、typemcriptコンパイラは、スクリプトが次のバージョンで持つ可能性のあるすべての新しい厳密なチェックパラメータを使用してコードを自動的にチェックすることです.
厳密なチェックパラメータは以下の通りです.
  • Noimpliciany
  • strictnullcheck
  • strictFunctionType
  • strictBindCallApply
  • strictPropertyInitiation
  • noimplicihis
  • Alwaysstrict
  • シリーズの次のポストでこれらのパラメータの各々をあなたに紹介します.厳しいモードそのものに集中しましょう.

    strict modeを使うべきですか?


    このパラメータをtrueに設定するとどうなりますか?まあ、それは依存してあなたのプロジェクトは、新しいです.設定ファイルやファイルを除いてプロジェクトにコードがない場合は、create-react-appのようなツールで生成されたBoilerPlateコードを使用します.しかし、あなたのプロジェクトが新しくないならば、ファイルとコードの膨大な量を持っていてください、そして、あなたは厳しいモードの特定の規則に従っていませんでした、そして、あなたはおそらくプロジェクトをコンパイルしようとしたあと、TSCによって提供される誤りのリストを得ます.
    そして、これは質問に対する答えです.あなたがちょうど新しいプロジェクトを始めるならば、私はTypesScriptで厳しいモードを使うことを強く勧めます.それはあなたが将来的にあなたのコードでエラー、誤植、間違いを避けるのに役立ちます.厳格モードでは、コードを書く方法で収縮します.一方、あなたは間違いを犯す方法を選ぶことはありません.単純で、冗長で、「退屈な」コードは、1つのラインコードよりも、“クール”なので、失敗しないでしょう.
    なぜいくつかのパラメータによって入力スクリプトの厳密なモードを有効にするのですか?これらのパラメータは既存のプロジェクトで使用できます.既存のプロジェクトでは、パラメーターstrictをtrueに設定することはできません.しかし、厳密なモードパラメータを設定することで、厳密にモードモード規則に従って徐々にコードベースを書き換えることができます.たとえば、パラメーターnoimplItAnontyをtrueに設定し、コードをこの規則に従って書き換えることができます(すべての関数でパラメーターの型を書く必要があります).おそらく、すべてのプロジェクトを書き直す時間がないでしょうが、コードの特定の部分を改善することができます.次回は、コードの品質を改善するための時間がある場合は、もう一つの厳格なモードパラメータを設定することができます(それはあなたの時間、コードの変更の数など).

    実際に


    例を見てみましょう.ここでは、ユーザーは、その名前を入力し、ユーザーがデータベースに(基本的には、ユーザーの配列を持つJSONファイル)のターミナルに挨拶を印刷する場合は、ユーザーに要求する単純なコンソールアプリです.一例のソースはhereである.新しいTypeScriptプロジェクトを作成し、以下のコードでいくつかのファイルを作成します.
    git clone https://github.com/kowalevski/ts-node-sample/tree/strict-mode-example
    
    アプリケーションは3つのファイルまたはモジュール機能を備えています.アプリケーションのエントリポイントは、ファイルsrc/mainです.TS
    import { createQuestioner } from "./createQuestioner";
    import { greeting } from "./greeting";
    import usersDB from './users.json';
    
    async function main() {
      try {
        const questioner = createQuestioner();
        const username = await questioner.ask("Type your name: ");
    
        const foundUser = usersDB.find((user) => user.username === username);
    
        greeting(foundUser.username);
    
        questioner.finishUp();
      } catch (e) {
        console.error(e);
        process.exit();
      }
    }
    
    main();
    
    モジュールcreateequesatorsには興味がありません.いくつかのAPIでサードパーティのライブラリとしてそれを認識しましょう.本当に必要なのはファイルsrc/挨拶です.TS
    export function greeting(names) {
      console.log(`Hello, ${names.map((name) => name.toLowerCase()).join(', ')}!`);
    }
    
    かなり簡単なコードですね.パラメタ名のタイプを指定しませんでした、しかし、我々はストリングの配列があると思っています.
    さて、私たちの小さなアプリケーションを実行しましょう.あなたはコードのどんな問題も見ましたか?厳格なモードは、このアプリのタイプスクリプトの設定で無効になっているので、我々はエディタ内の任意のエラーを参照してくださいする必要はありません.
    次のコマンドでアプリケーションを実行します
    tsc && node dist/main.js
    
    Or
    npm run dev
    
    名前を入力した後に(必要に応じて名前を付けることができます)、私たちのコードに誤りがあるのを見るべきです.しかし、それらはノードを実行した後にだけ、すなわち実行時に識別されました.したがって、typescriptコンパイラはコードに問題はありませんでした.
    では、スタティックモードを有効にし、何が起こるかを見ましょう.tsconfigで厳密なパラメータを有効にした後.エディタでエラーが表示されます(入力スクリプトをサポートしている場合).

    また、typescriptコンパイルを実行すると、そのスクリプトがエラーを強調表示します.
    src/greeting.ts:1:26 - error TS7006: Parameter 'names' implicitly has an 'any' type.
    
    1 export function greeting(names) {
                               ~~~~~
    
    src/greeting.ts:2:36 - error TS7006: Parameter 'name' implicitly has an 'any' type.
    
    2   console.log(`Hello, ${names.map((name) => name.toLowerCase()).join(', ')}!`);
                                         ~~~~
    Found 2 errors
    
    基本的には、関数のあいまいさの中でパラメタ名のタイプを指定しなかったことが問題です.これは、関数がモジュールmainで間違った引数で呼ばれることができることを意味します.src/挨拶の型を指定します.T .文字列の値の配列でなければなりません.
    export function greeting(names: string[]) {
      console.log(`Hello, ${names.map((name) => name.toLowerCase()).join(', ')}!`);
    }
    
    すごい!ファイルメインにあることを見ましょう.t .エディターでは、エラーがあることがわかるかもしれません.タイプスクリプトを実行して、何がここで間違っているかについて見ましょう.
    src/main.ts:12:14 - error TS2345: Argument of type '{ username: string; age: number; } | undefined' is not assignable to parameter of type 'string[]'.
      Type 'undefined' is not assignable to type 'string[]'.
    
    12     greeting(foundUser.username);
                    ~~~~~~~~~~~~~~~
    
    Found 1 error
    
    わかりました.それで、問題は我々が変数Fonuserの値をそれ自体として置くということです.私たちがしなければならないのは、引数の引数を書くユーザであるからです.ユーザ名.また、変数のFunUserが未定義であるかもしれないので、それがfalseかどうかチェックする必要があります.
    async function main() {
      try {
        const questioner = createQuestioner();
        const username = await questioner.ask("Type your name: ");
    
        const foundUser = usersDB.find((user) => user.username === username);
    
        if (!foundUser) {
            console.log('User is not found');
            questioner.finishUp();
            return;
        }
    
        greeting([foundUser.username]);
    
        questioner.finishUp();
      } catch (e) {
        console.error(e);
        process.exit();
      }
    }
    
    さて、もう一度アプリを実行しましょう.
    npm run dev
    
    正しく動作するはずです.

    結論


    ですから、このコードが実行されているときに、TSCによってコンパイルされたコードでさえ、問題と不正な振る舞いをすることができます.TypesScriptの目的は、アプリケーションがエラーで動作したり、アプリケーションのコードが実行される前に全く動作しないときの時間を防ぐことです.TypeScriptはあなたのコードを分析して、あなたによって指定されたタイプに基づいています、あるいは、タイプ推論によって、潜在的危険でコードの強調表示部分.そして、それが働く最善の方法は、厳しいモードです.厳格なモードを使用すると、プログラムを実行する前に、より多くの潜在的なエラーやコードベースのコードをキャッチします.
    この動画はお気に入りから削除されています.してください、subscribe to my email newsletter日まで滞在する.