ここで問題は見つかりません。 良いコード品質ツールを使用して検出することは可能ですか?検出ネストされた未定義の属性(eslint /標準)
だけの例を与えるために、IDEA/Webstormはそう正しく
問題を報告している、ただ不思議、それはコマンドラインツールを使用して同じ問題を検出することが可能です。
ここで問題は見つかりません。 良いコード品質ツールを使用して検出することは可能ですか?検出ネストされた未定義の属性(eslint /標準)
だけの例を与えるために、IDEA/Webstormはそう正しく
問題を報告している、ただ不思議、それはコマンドラインツールを使用して同じ問題を検出することが可能です。
FlowまたはTypeScriptのような静的型チェッカーは、このクラスのバグを検出するように設計されています。 try Flow editorまたはTypeScript playgroundにサンプルコードを貼り付けてください。特定の型の注釈を追加するコードを変更することなく、両方のチェッカーがエラーをキャッチします。
Flow:
4: const b = obj.a.c
^property `c`. Property not found in
4: const b = obj.a.c
^object literal
Property 'c' does not exist on type '{ b: string; }'.
JavaScriptでは、undefined
は変数の正しい値です。したがって、この値の割り当てを検出することはできません。あなたの問題のために が、私はこの1つのような関数を定義するためにあなたを提案:以下のように
const assignNested = function(value) {
if (value === undefined)
throw new Error("undefined assignment");
return value;
}
次に、あなたのコードを書き換えることができます。
const obj = {a: {b: 'just a value'}};
const b = assignNested(obj.a.b); // b = 'just a value'
const c = assignNested(obj.a.c); // raise exception
はあなたのthrowed例外をキャッチすることを忘れないでください。独自の例外タイプを定義したい場合は、可能です(https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Errorをご覧ください)。
ありがとう、私は質問 –
Javascriptは型指定された言語ではないため、コードを実行する前にオブジェクトの構造を検証することは実際には不可能です。
たとえば、HTTPリクエストから応答を受け取った場合、コード品質ツールは結果のJSONオブジェクトを認識しません。
を更新しました、ありがとう、私は質問を更新しました –
あなたは例外を発生させたいですか? – BNilsou
@BNilsouはい、私は静的コード品質ツールによって警告/エラーを発生させたいと考えています –
この記事とカスタムルールが正しい方向に向いていると思います: http://blog.cowchimp.com/writing- a-custom-eslint-rule-to-spot-undeclared-props/ – 0xDEFACED