リズムのじかん

javascript、typescriptなど中心に書きます。

【小ネタ】typescriptで文字列が数値かどうか判定→変換

小ネタです。

文字列が数値かどうか判定して、数値ならその値を返し、数値でなければnullを返すとします。

javascriptで書くと以下です。

function(num){
  return isNaN(num) ? null : Number(num);
}

これをtypescriptでそのまま書くとコンパイルが通りません。

static toNumber(num:string):number {
  return isNaN(num) ? null : Number(num); //コンパイルエラー
}

理由はなんと、lib.d.tsではisNaNの引数がnumberになっていました。

/**
  * Returns a Boolean value that indicates whether a value is the reserved value NaN (not a number). 
  * @param number A numeric value.
  */
declare function isNaN(number: number): boolean;

なので、以下のように書いて解決です。

static toNumber(num: string): number {
  return ((n:number) => isNaN(n) ? null : n)(Number(num));
}