1. ホーム
  2. javascript

TypeScriptのisNanは数字しか受け付けません。

2023-10-04 12:17:46

質問

WebStorm 2016.2.2, TypeScript 2.1, Node.jsで作業しています。

なぜか isNan は数値のみを受け付ける関数として宣言されています。

declare function isNaN(number: number): boolean;

anyに変えてみましたが、TSCには影響がないようです。やはり同じエラーが出ます。

string'型の引数は '数値'

私のコード(簡略化)です。

isNan("10");

どうすれば解決・回避できるのでしょうか?


編集します。

仕様上、isNanのパラメータはどのような型でも良いことに注意してください。 数.isNan()

また 私のコードは簡略化されました。文字列の場合は、数字に変換したい文字列のような数字 ("10") か、単純な文字列 ("Hello world") のどちらかでしょう。

私のコード全体を含めることによってこの質問を長くしたくなかったのですが、混乱を招いたので、これは私の実際のコードです。

            if (typeof expectedValue === "string" && !isNaN(expectedValue)) {
                    expectedValue = +expectedValue;
                }

            if (typeof actualValue === "string" && !isNaN(ctualValue)) {
                actualValue = +actualValue;
            }

            switch (this.operator) {
                case Operator.equal:
                    return actualValue == expectedValue;
                case Operator.notEqual:
                    return actualValue === undefined || actualValue != expectedValue;
                case Operator.greaterThan:
                    return actualValue > expectedValue;
                case Operator.littleThan:
                    return actualValue < expectedValue;
                case Operator.greaterOrEqual:
                    return actualValue >= expectedValue;
                case Operator.littleOrEqual:
                    return actualValue <= expectedValue;
            }

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

別の方法で実装することをお勧めします。

理由は

  1. 短いかもしれないが、何が起こっているのか理解するのが容易ではない
  2. 使用方法 isNaN を使うことは、ここでは最良の選択ではありません。 isNaN("")false だけでなく

値を数値に変換して、その数値が NaN なのか、そうでないのか(@smnbbrvさんが書いているように)。

if (typeof expectedValue === "string" && !Number.isNaN(Number(expectedValue))) {
    expectedValue = Number(expectedValue);
}


編集

として値を渡すことができます。 any :

isNaN(ctualValue as any)

コンパイラのチェックを回避するため。