1. ホーム
  2. typescript

[解決済み] 未使用のパラメータに対する型チェックをスキップする

2022-02-19 07:43:15

質問

typescript プロジェクトをコンパイルする際に noImplicitAny オプションで、変数や引数に型を指定するのを忘れないようにします。

しかし、時には使わない引数があることもあります。例えば

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

abort関数の第1引数には興味がないので、_という名前をつけて無視しています。

TypeScriptではそのようなやり方が正しいのでしょうか?ガイドには載っていなかったのですが。引数は1つしか指定できないので、適切な方法ではないのではと思います。

Typescript は次のようなエラーを発生させます。

エラー TS7006: パラメータ '_' は暗黙のうちに 'any' 型を持ちます。

と入力すればいいのですが _:any が、使わない引数のためにちょっとやりすぎな気がします。

どのように解決するのですか?

私も同じような悩みを抱えていました。 例えば、expressとroutingを使用すると、resパラメータだけが必要になることがよくあります。

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

この場合、_を使うというあなたのアイデアも有効ですが、私はこうすることも有効だと考えています。

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

というのも、'_' だけだと lodash/underscore を使うときにちょっと混乱しそうだし、4番目のパラメータに興味があることが一目瞭然だからです。

<ブロッククオート

更新:この回答を投稿してからずいぶん時間が経ちました。 というコメントで、少し誤解があるようです。 そこで、私は を明確にします。

アンダースコアのトリックは、Typescriptでは今でも非常に有効です。 最初の回答で述べたように、expressを使用しているときに app.get('/', (req, res) => { という警告が表示されます。 'req' is declared but its value is never read が、-> app.get('/', (_req, res) => { という警告が出ます。 を取得してはいけません。 error TS7006: Parameter 'req' implicitly has an 'any' type. というエラーが発生します。 @types/express は、いずれにせよ、このパラメータを暗黙のうちにタイプしているはずです。