この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - JavaScript コーディング問題
144. JSON data type以外のdata typeをserialize/deserializeする

function parse(string: string) {
  return JSON.parse(
    string,
    (key, value) => {
      if (typeof value === 'string' && /^([+\-]?\d+(?:\.\d+)?)([nbsf]|$)/.test(value)) {
        // BigInt, NaN, Infinity, -Infinity を判別し正しい型に変換する
        const [, numStr, type] = value.match(/^([+\-]?\d+(?:\.\d+)?)([nbsf]|$)/)!;
        switch (type) {
          case 'n':
            return BigInt(numStr + 'n');
          case 'b':
            return NaN;
          case 's':
            return Infinity;
          case 'f':
            return -Infinity;
          default:
            return value;
        }
      }
      return value;
    }
  );
}

function stringify(data: any) {
  return JSON.stringify(
    data,
    (key, value) => {
      if (typeof value === 'bigint') {
        return value.toString() + 'n';
      }
      if (value === Infinity) {
        return 'Infinity';
      }
      if (value === -Infinity) {
        return '-Infinity';
      }
      if (Number.isNaN(value)) {
        return 'NaN';
      }
      return value;
    }
  );
}

このコードでは、JSON.parse() と JSON.stringify() を使用します。JSON.stringify() は、BigInt、NaN、Infinity、-Infinityを対処するために変更されたカスタム関数を使用しています。JSON.parse() は、カスタム復号化関数を使用して、serializeされた値から正しい型に変換します。