web-dev-qa-db-ja.com

未使用のパラメーターの型チェックをスキップ

TypeScriptプロジェクトをコンパイルするときは、変数と引数で型を指定するのを忘れないように、noImplicitAnyオプションを使用しています。

ただし、使用しない引数がある場合もあります。例えば:

jQuery.ajaxTransport("+*", function (options: JQueryAjaxSettings) {
  return {
    abort: function (_, callback: JQueryCallback) { 

Abort関数の最初の引数には興味がないので、_という名前を付けて無視します。

それはTypeScriptでそれを行う適切な方法ですか?ガイドでは見つかりませんでした。 _という引数は1つしか指定できないため、これは適切な方法ではないようです。

TypeScriptは次のエラーを発生させます。

エラーTS7006:パラメータ '_'は暗黙的に 'any'タイプを持っています。

_:anyしかし、それは私が使用しない引数には少々やり過ぎに思えます。

13
Zyphrax

私も同じ問題を抱えていました。 sayエクスプレスとルーティングを使用すると、多くの場合、resパラメーターのみが必要になります。

router.get('/', function (req, res) { res.end('Bye.'); });

_を使用するという考えはここで機能しますが、これも機能することがわかりました。

function (_1, _2, _3, onlyThis) { console.log(onlyThis); }

'_'だけを実行すると、lodash/underscoreの使用が少し混乱する可能性があるため、これはより良いように思われます。また、興味のある4番目のパラメータであることも明らかになります。

18
Keith

私は遅れているかもしれませんが、他の解決策に悩まされており、これはいつも私にとってうまくいきます:

function ({}={}, {}={}, {}={}, onlyThis) { console.log(onlyThis); }

比較

_0_1、...ソリューションを使用すると、次のようなスクープ関数の問題に直面しました。

function parent(_0, _1, _2) {
  function child(_0, _1, _2) {
    // TypeScript crying about shallowed variables
  }
}

しかし、空のオブジェクトではうまくいきます:

function parent({}, {}, {}) {
  function child({}, {}, {}) {
    // :-)
  }
}

パラメータが次のように入力されたとしても:

function parent({}: number, {}: string, {}: any) {
  function child({}: number, {}: string, {}: any) {
    // :-) x2
  }
}

編集:

そして here と書かれているように、デフォルト値を設定すると、指定されたパラメーターがundefinedまたはnullの場合にエラーがスローされるのを回避できます。

function parent({}={}, {}={}, {}={}) {
  function child({}={}, {}={}, {}={}) {
    // :-)
  }
}
9
Miaow