{"id":490911,"date":"2026-08-14T07:27:26","date_gmt":"2026-08-14T07:27:26","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=490911"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2026-08-14T07:27:26","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=490911","title":{"rendered":"Encode, don&#8217;t stringify \u2014 \u043a\u0430\u043a JSON.stringify \u0432\u0430\u043c \u0432\u0440\u0451\u0442"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u043b\u0435\u0442 5-7 \u043d\u0430\u0437\u0430\u0434 \u0432\u0441\u0435 \u0441\u0438\u0434\u0435\u043b\u0438 \u043d\u0430 <a href=\"https:\/\/github.com\/jquense\/yup\" rel=\"noopener noreferrer nofollow\">Yup<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/ajv.js.org\/\" rel=\"noopener noreferrer nofollow\">Ajv<\/a> \u0438 \u0432\u0441\u0435\u0445 \u0432\u0441\u0451 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e? \u041f\u0440\u0438\u0437\u043d\u0430\u044e, \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \ud83e\udee1<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c <a href=\"https:\/\/lexi-lambda.github.io\/blog\/2019\/11\/05\/parse-don-t-validate\/\" rel=\"noopener noreferrer nofollow\">\u201cParse, don\u2019t validate\u201d<\/a>, \u0441\u0442\u0430\u043b\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043d\u0438\u0433\u043e\u0439 \u0434\u043b\u044f \u043a\u0443\u0447\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u043b\u043e \u0438 \u0443 \u043d\u0430\u0441, \u0432 JavaScript \u0438 TypeScript. \u0422\u044b\u0441\u044f\u0447\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0441\u043e \u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u2014 \u043b\u0443\u0447\u0448\u0435\u0435 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \ud83d\ude01<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0440\u0435\u0448\u0451\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u044b \u043e\u0442\u043a\u0440\u044b\u043b\u0438 \u043d\u0435 \u0440\u0430\u0434\u0438 \u043d\u0435\u0451. \u0410 \u0432\u043e\u0442 \u0447\u0442\u043e \u043d\u0435 \u0440\u0435\u0448\u0435\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><strong>\u201cEncode, don\u2019t stringify\u201d<\/strong><\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u043b\u0438, \u043f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f: <strong>\u041d\u0418\u041a\u041e\u0413\u0414\u0410 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <\/strong><code><strong>JSON.stringify<\/strong><\/code><strong> \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u0434\u0435.<\/strong> &#8212; \u0414\u0430, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044d\u0442\u043e \u0437\u0432\u0443\u0447\u0438\u0442 \u0434\u0435\u0440\u0437\u043a\u043e!<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u043a\u0430\u0436\u0443 \u2014 \u0438, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0441\u0434\u0435\u043b\u0430\u044e \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0434\u043b\u044f JavaScript-\u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0435\u043c \u0436\u0435, \u0447\u0435\u043c \u0432 2019-\u043c \u0441\u0442\u0430\u043b\u043e <a href=\"https:\/\/lexi-lambda.github.io\/blog\/2019\/11\/05\/parse-don-t-validate\/\" rel=\"noopener noreferrer nofollow\">\u201cParse, don\u2019t validate\u201d<\/a>. \u041f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<h3>FAQ \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c<\/h3>\n<p><strong>\u00ab\u041d\u0438\u043a\u043e\u0433\u0434\u0430? \u0421\u043e\u0432\u0441\u0435\u043c?\u00bb<\/strong> \u0414\u0430. \u0415\u043c\u0443 \u043c\u0435\u0441\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430, \u043a\u0430\u043a \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u0434\u0435 \u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0435.<\/p>\n<p><strong>\u041a\u0442\u043e \u0442\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u043e\u0439?<\/strong> \u042f <a href=\"https:\/\/github.com\/DZakh\" rel=\"noopener noreferrer nofollow\">\u0414\u043c\u0438\u0442\u0440\u0438\u0439<\/a> &#8212; \u0434\u0435\u043b\u0430\u044e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441 \u0441 \u0443\u043f\u043e\u0440\u043e\u043c \u043d\u0430 DX \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0441\u043e\u0441\u0442\u043e\u044e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 <a href=\"https:\/\/rescript-lang.org\/\" rel=\"noopener noreferrer nofollow\">ReScript Lang<\/a> \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b <a href=\"https:\/\/github.com\/DZakh\/sury\" rel=\"noopener noreferrer nofollow\">Sury<\/a>, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p><strong>\u00ab\u0422\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u043a\u043b\u0430\u043c\u0430?\u00bb<\/strong> \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c, \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f, \u0438 \u043e\u0431\u0437\u043e\u0440 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0447\u0435\u0441\u0442\u043d\u044b\u043c. <a href=\"https:\/\/github.com\/DZakh\/sury\" rel=\"noopener noreferrer nofollow\">Sury<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0434\u0435\u043b\u0430\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 4.5 \u0433\u043e\u0434\u0430, \u0438 \u044f \u043f\u0440\u0430\u0432\u0434\u0430 \u0441\u0447\u0438\u0442\u0430\u044e \u0435\u0451 \u043b\u0443\u0447\u0448\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f. \u041d\u043e \u0432\u0430\u0436\u043d\u0430 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0430\u043c\u0430 \u0438\u0434\u0435\u044f: \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0441 \u201cParse, don\u2019t validate\u201d, \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 \u0441\u0442\u0430\u043d\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<blockquote>\n<p>\u0411\u0443\u0434\u0443 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0435\u043d \u0437\u0430 \u0440\u0435\u043f\u043e\u0441\u0442, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u0439\u0434\u0451\u0442 \ud83d\ude4f \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u043a\u0430\u0447\u0430\u0435\u043c \u201cEncode, don\u2019t stringify\u201d!<\/p>\n<\/blockquote>\n<h3>\u0427\u0430\u0441\u0442\u044c 1: \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0435 \u0432\u0440\u0430\u043d\u044c\u0451<\/h3>\n<p>\u0427\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 <code>JSON.stringify<\/code>, \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b? \u0421 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0441\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0437\u0430 7 \u043b\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0432\u0441\u0435 \u0433\u0440\u0430\u0431\u043b\u0438, \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0436\u043d\u043e. \u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c <code>JSON.stringify<\/code> \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0441\u043e\u0432\u0440\u0430\u043b &#8212; \u044f \u0443\u0434\u0438\u0432\u043b\u044e\u0441\u044c \ud83d\udc40<\/p>\n<h4>\u041e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 undefined<\/h4>\n<pre><code>JSON.stringify(undefined);\/\/ =&gt; undefinedJSON.stringify(() =&gt; {});\/\/ =&gt; undefined<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0442\u043e-\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u0442: \u043d\u0443 \u0438 \u043b\u0430\u0434\u043d\u043e. \u041d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0442\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>stringify(value: any, replacer?: ..., space?: ...): string;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0441\u043e\u0431\u0443\u044e \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <code>any<\/code> \u043d\u0430 \u0432\u0445\u043e\u0434\u0435. \u0414\u0443\u043c\u0430\u044e, \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e.<\/p>\n<p>\u0415\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/mattpocock\/ts-reset\" rel=\"noopener noreferrer nofollow\">ts-reset<\/a>, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u043d \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442: \u043e\u043d \u0447\u0438\u043d\u0438\u0442 <code>JSON.parse<\/code>, \u0430 \u0434\u043b\u044f <code>JSON.stringify<\/code> \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435.<\/p>\n<h4>\u041e\u043d \u043f\u0430\u0434\u0430\u0435\u0442<\/h4>\n<pre><code>JSON.stringify({ id: 1n });\/\/ =&gt; TypeError: Do not know how to serialize a BigIntconst user = {};user.self = user;JSON.stringify(user);\/\/ =&gt; TypeError: Converting circular structure to JSONlet root = {},  node = root;for (let i = 0; i &lt; 50000; i++) node = node.next = {};JSON.stringify(root);\/\/ =&gt; RangeError: Maximum call stack size exceeded<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u2014 \u0443\u0436\u0435 \u044d\u043a\u0437\u043e\u0442\u0438\u043a\u0430 \u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e \u0442\u0435\u043c\u0443 \u0441\u0442\u0430\u0442\u044c\u0438, \u043d\u043e \u043f\u0443\u0441\u0442\u044c \u0442\u043e\u0436\u0435 \u043f\u043e\u043b\u0435\u0436\u0430\u0442 \u0432 \u043a\u043e\u043f\u0438\u043b\u043a\u0435 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<h4>\u041f\u043e \u043e\u0448\u0438\u0431\u043a\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c<\/h4>\n<p>\u0410 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u0430\u0434\u0430\u0435\u0442, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u0442\u043a\u0438:<\/p>\n<pre><code>JSON.stringify({ user: { orders: [{ total: 1n }] } });\/\/ =&gt; TypeError: Do not know how to serialize a BigInt<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u0430\u043a\u043e\u0439 \u0437\u0430\u043a\u0430\u0437, \u043a\u0430\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u2014 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0438 \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e <code>res.json()<\/code>. \u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e.<\/p>\n<h4>\u041e\u043d \u043c\u043e\u043b\u0447\u0430 \u043f\u043e\u0440\u0442\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435<\/h4>\n<p>\u0410 \u0432\u043e\u0442 \u043d\u0430 \u044d\u0442\u043e\u043c \u0445\u043e\u0447\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0434\u0435\u043d\u0435\u0433. \u041d\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u043d\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0442\u044f\u0436\u0435\u043b\u043e:<\/p>\n<pre><code>JSON.stringify({ price: Infinity }); \/\/ =&gt; '{\"price\":null}'JSON.stringify({ price: NaN }); \/\/ =&gt; '{\"price\":null}'\/\/ \u0413\u0434\u0435-\u0442\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0438\u043b\u0430\u0441\u044c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430, \u0430 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u0443\u0441\u0442\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0438\u043b\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0435JSON.stringify({ a: undefined, b: 1 }); \/\/ =&gt; '{\"b\":1}'      \u043a\u043b\u044e\u0447 \u043f\u0440\u043e\u043f\u0430\u043bJSON.stringify([1, undefined, 2]); \/\/ =&gt; '[1,null,2]'   \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u0443\u0436\u0435 nullJSON.stringify([1, () =&gt; {}, 2]); \/\/ =&gt; '[1,null,2]'\/\/ \u0414\u043b\u044f \u0432\u0430\u0441, \u043c\u043e\u0436\u0435\u0442, \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e, \u0430 \u0432\u043e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 T | null \u043d\u0430 \u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0441\u044fJSON.stringify({ m: new Map([[\"a\", 1]]) }); \/\/ =&gt; '{\"m\":{}}'JSON.stringify({ s: new Set([1, 2]) }); \/\/ =&gt; '{\"s\":{}}'\/\/ \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u0447\u0435\u0437\u043b\u0438, \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435\u0442JSON.stringify({ b: new Uint8Array([1, 2, 3]) });\/\/ =&gt; '{\"b\":{\"0\":1,\"1\":2,\"2\":3}}'\/\/ \u041c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442\u043e\u0432 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0430\u043c\u043e\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u2014 \u0447\u0442\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e, \u0438 TypeScript \u0442\u0443\u0442 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043a\u0440\u043e\u0435\u0442.<\/p>\n<h4>\u041e\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0451 \u043f\u043e\u0434\u0440\u044f\u0434<\/h4>\n<pre><code>JSON.stringify({ login: \"hello\", _internalSecret: \"1232\" });\/\/ =&gt; '{\"login\":\"hello\",\"_internalSecret\":\"1232\"}'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u043d\u0435\u0442: \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435, \u0442\u043e \u0438 \u0443\u0435\u0434\u0435\u0442 \u043d\u0430\u0440\u0443\u0436\u0443. \u041f\u0440\u044f\u043c\u043e \u0441\u0435\u043a\u0440\u0435\u0442\u044b \u0432\u044b \u0442\u0430\u043c \u0432\u0440\u044f\u0434 \u043b\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0435, \u0430 \u0432\u043e\u0442 \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u2014 \u043b\u0435\u0433\u043a\u043e.<\/p>\n<h3>\u0427\u0430\u0441\u0442\u044c 2: encode, don\u2019t stringify<\/h3>\n<p>\u0420\u0430\u0437 \u0432\u044b \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e\u0441\u044e\u0434\u0430, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441 \u043a\u0430\u043a\u0438\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0440\u0430\u043d\u044c\u0451\u043c <code>JSON.stringify<\/code> \u0432\u044b \u0443\u0436\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c. \u0420\u0430\u0434 \u0432\u0438\u0434\u0435\u0442\u044c \ud83e\udd1d<\/p>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0438 \u043c\u044b\u0441\u043b\u044c \u0440\u043e\u0432\u043d\u043e \u0442\u0430 \u0436\u0435, \u0447\u0442\u043e \u0432 \u201cParse, don\u2019t validate\u201d: <code>JSON.stringify<\/code> \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u043c\u0438 \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0440\u0443\u0436\u0443, \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u044d\u043d\u043a\u043e\u0434\u0435\u0440 \u2014 \u043e\u043d \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON \u0438\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code>type user = {  name : string;  age : int;}let user_to_json { name; age } =  `Assoc [    (\"name\", `String name);    (\"age\", `Int age);  ]let json = user_to_json { name = \"Alice\"; age = 42 }let output = Yojson.Safe.to_string json(* {\"name\":\"Alice\",\"age\":42} *)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 OCaml \u044f \u0432\u0437\u044f\u043b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u0443 \u0441\u0443\u0442\u044c \u0438 \u0442\u043e, \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0433\u043e\u0434\u0430\u043c\u0438 \u0436\u0438\u0432\u0443\u0442 \u0432 \u00ab\u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445\u00bb \u044f\u0437\u044b\u043a\u0430\u0445. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u2014 \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 <a href=\"https:\/\/typia.io\/\" rel=\"noopener noreferrer nofollow\">Typia<\/a> \u0443 \u043d\u0430\u0441.<\/p>\n<p>\u041c\u043d\u0435 \u0431\u043b\u0438\u0436\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0439 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u0412\u0441\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 JS-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u0445\u0435\u043c \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0440\u0430\u0432\u0434\u044b \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0442\u0438\u043f\u043e\u0432 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438. \u0410 \u0440\u0430\u0437 \u0441\u0445\u0435\u043c\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 <em>\u0432\u0445\u043e\u0434\u0435<\/em>, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0445 \u0438 \u043d\u0430 <em>\u0432\u044b\u0445\u043e\u0434\u0435<\/em> \u2014 \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e <a href=\"https:\/\/github.com\/DZakh\/sury\" rel=\"noopener noreferrer nofollow\"><strong>Sury<\/strong><\/a> \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u0435\u0440\u0432\u044b\u043c \u0432 \u043c\u0438\u0440\u0435 JS-\u0441\u0445\u0435\u043c. \u041e\u0434\u043d\u0430 \u0441\u0445\u0435\u043c\u0430, \u043e\u0431\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>import * as S from \"sury\";const schema = S.schema({  id: S.bigint,  at: S.date,  price: S.number,});\/\/? Schema&lt;{id: bigint, at: Date, price: number}, {id: bigint, at: Date, price: number}&gt;const encodeToJsonString = S.encoder(schema, S.jsonString);\/\/? (data: {id: bigint, at: Date, price: number}) =&gt; stringencodeToJsonString({  id: 9007199254740993n,  at: new Date(\"2026-01-15T10:30:00.000Z\"),  price: 9.99,});\/\/ =&gt; '{\"id\":\"9007199254740993\",\"at\":\"2026-01-15T10:30:00.000Z\",\"price\":9.99}'\/\/ \u0438\u043b\u0438const encodeToJson = S.encoder(schema, S.json);\/\/? (data: {id: bigint, at: Date, price: number}) =&gt; JSON\/\/ \u0438\u043b\u0438 (\u0441\u043a\u043e\u0440\u043e)const encodeToBase64url = S.encoder(schema, S.base64url);\/\/? (data: {id: bigint, at: Date, price: number}) =&gt; string\/\/ \u0438\u043b\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0440\u0430\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043eS.decoder(  S.jsonString,  schema,)('{\"id\":\"9007199254740993\",\"at\":\"2026-01-15T10:30:00.000Z\",\"price\":9.99}');\/\/ =&gt; {id: 9007199254740993n, at: new Date(\"2026-01-15T10:30:00.000Z\"), price: 9.99}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 <code>JSON.stringify<\/code> \u043d\u0435 \u043f\u0435\u0440\u0435\u0432\u0430\u0440\u0438\u0432\u0430\u0435\u0442, \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0441\u0430\u043c\u043e\u0439 \u0441\u0445\u0435\u043c\u044b. \u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c \u0434\u043e \u043f\u043e\u043b\u044f, \u0430 \u043d\u0435 \u043f\u043e\u0440\u0442\u044f\u0442\u0441\u044f \u043c\u043e\u043b\u0447\u0430. \u041b\u0438\u0448\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u043e\u0442\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f. \u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e.<\/p>\n<pre><code>encodeToJsonString({ id: 1n, at: new Date(), price: Infinity });\/\/ =&gt; throws SuryError: Failed at [\"price\"]: Expected JSON, received Infinity<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u043e\u0436\u0435 \u043d\u0435\u0442 \u2014 <code>encodeToJsonString<\/code> \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043f\u043e\u0434 \u044d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code>(i) =&gt; {  let v0 = i[\"price\"];  return (    '{\"id\":\"' +    i[\"id\"] +    '\",\"at\":\"' +    i[\"at\"].toISOString() +    '\",\"price\":' +    (Number.isFinite(v0) ? v0 : e[1](v0)) +    \"}\"  );};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042d\u0442\u043e \u0432\u0435\u0441\u044c \u044d\u043d\u043a\u043e\u0434\u0435\u0440 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435, \u2014 <code>Number.isFinite<\/code>: \u043f\u0440\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u0438\u0437 unknown \u0442\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e, \u0430 \u043f\u0440\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 JSON \u0443\u0436\u0435 \u043d\u0435\u0442.<\/p>\n<h3>\u0427\u0430\u0441\u0442\u044c 3: \u0447\u0442\u043e \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u043d\u0430 \u0440\u044b\u043d\u043a\u0435<\/h3>\n<p>\u0418\u0434\u0435\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u044d\u043d\u043a\u043e\u0434\u0435\u0440 \u0438\u0437 \u0441\u0445\u0435\u043c\u044b \u043d\u0435 \u043d\u043e\u0432\u0430\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0439\u0434\u0451\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u2014 \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u043d\u043e\u0439.<\/p>\n<p><strong>\u0417\u0430\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0435.<\/strong> <code>compile-json-stringify<\/code> \u0438 <code>slow-json-stringify<\/code> \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u043b\u0438 \u0441 2022 \u0433\u043e\u0434\u0430, \u0430 <code>@deepkit\/type<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u0431\u043e\u0440\u043a\u0438, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437 \u0443 \u043d\u0435\u0433\u043e \u0431\u044b\u043b \u0432 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435 2025. \u0427\u0435\u043c \u044d\u0442\u043e \u0433\u0440\u043e\u0437\u0438\u0442: <code>slow-json-stringify<\/code> \u043d\u0435 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u0432\u044b\u0447\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>{ name: 'he said \"hi\"' }<\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <code>{\"name\":\"he said \"hi\"\"}<\/code> \u2014 \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442 \u043d\u0438\u043a\u0442\u043e, \u0438 \u0431\u0430\u0433 \u043b\u0435\u0436\u0438\u0442 \u0442\u0430\u043c \u0443\u0436\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0433\u043e\u0434\u0430. \u0411\u0440\u0430\u0442\u044c \u043d\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e.<\/p>\n<p><strong>\u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <\/strong><a href=\"https:\/\/elysiajs.com\/\" rel=\"noopener noreferrer nofollow\"><strong>ElysiaJS<\/strong><\/a><strong>.<\/strong> <a href=\"https:\/\/github.com\/elysiajs\/json-accelerator\" rel=\"noopener noreferrer nofollow\">json-accelerator<\/a> \u2014 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u043e\u0442 \u0440\u0435\u0431\u044f\u0442, \u0441\u0434\u0435\u043b\u0430\u0432\u0448\u0438\u0445 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 HTTP-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u041d\u043e \u0432 \u0441\u0430\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043e\u043d \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u043b, \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u043d\u0435 \u0431\u044b\u043b\u043e \u0441 \u0430\u043f\u0440\u0435\u043b\u044f 2025, \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0442\u0430\u043c \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435: \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438, \u0442\u043e \u043e\u043d \u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0442\u0438\u043f\u0443, \u0442\u0430\u043a \u0447\u0442\u043e <code>{ price: Infinity }<\/code> \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0434\u0430\u0451\u0442 <code>{\"price\":Infinity}<\/code> \u2014 \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON. \u0426\u0435\u043b\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u044b\u043b\u0430 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c <code>JSON.stringify<\/code>, \u0430 \u043d\u0435 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u043c\u0438\u043c\u043e.<\/p>\n<p><strong>\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b.<\/strong> <a href=\"https:\/\/github.com\/sveltejs\/devalue\" rel=\"noopener noreferrer nofollow\">devalue<\/a> (SvelteKit) \u0438 <a href=\"https:\/\/github.com\/ravionhq\/superjson\" rel=\"noopener noreferrer nofollow\">superjson<\/a> (tRPC) \u2014 \u0433\u0438\u0433\u0430\u043d\u0442\u044b, \u0432\u043c\u0435\u0441\u0442\u0435 \u043e\u043a\u043e\u043b\u043e 20 \u043c\u043b\u043d \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0432 \u043d\u0435\u0434\u0435\u043b\u044e \u2014 \u0438 \u043e\u043d\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443:<\/p>\n<pre><code>const value = {  at: new Date(\"2026-01-15T10:30:00Z\"),  price: Infinity,  secret: \"LEAKED\",};devalue.stringify(value);\/\/ =&gt; [{\"at\":1,\"price\":-4,\"secret\":2},[\"Date\",\"2026-01-15T10:30:00.000Z\"],\"LEAKED\"]superjson.stringify(value);\/\/ =&gt; {\"json\":{\"at\":\"2026-01-15T10:30:00.000Z\",\"price\":\"Infinity\",\"secret\":\"LEAKED\"},\/\/     \"meta\":{\"values\":{\"at\":[\"Date\"],\"price\":[\"number\"]},\"v\":1}}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0423 \u043d\u0438\u0445 <code>bigint<\/code>, <code>Date<\/code>, <code>Map<\/code> \u0438 \u0434\u0430\u0436\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0434\u043e\u0435\u0437\u0436\u0430\u044e\u0442 \u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u2014 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430. \u042f \u0431\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0430 \u043a\u043e\u043d\u0446\u0430 \u0432\u0430\u0448\u0438, \u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435. \u041d\u043e \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442: \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c \u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0439\u043c\u0451\u0442, \u0430 \u0431\u0435\u0437 \u0441\u0445\u0435\u043c\u044b \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0440\u043e\u0432\u043d\u043e \u0442\u0443 \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0435\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e \u0438 \u0441 <code>JSON.stringify<\/code>.<\/p>\n<p><a href=\"https:\/\/typia.io\/\" rel=\"noopener noreferrer nofollow\"><strong>typia<\/strong><\/a> \u0447\u0438\u0442\u0430\u0435\u0442 \u0432\u0430\u0448\u0438 TypeScript-\u0442\u0438\u043f\u044b \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0435 \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0437 \u043d\u0438\u0445 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440. <code>typia.json.assertStringify&lt;T&gt;()<\/code> \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442 \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u2014 <code>invalid type on $input.id<\/code> \u2014 \u0442\u0430\u043a \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u0447\u0435\u0441\u0442\u043d\u043e \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e, \u0430 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0437\u0430\u0438\u043d\u043b\u0430\u0439\u043d\u0435\u043d. \u041f\u043b\u0430\u0442\u0430 \u2014 \u0441\u0431\u043e\u0440\u043a\u0430: \u043d\u0443\u0436\u0435\u043d <code>ttsc<\/code> \u0438\u043b\u0438 unplugin, \u0438\u0437 \u0447\u0438\u0441\u0442\u043e\u0433\u043e JavaScript \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u0445\u0435\u043c\u044b \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u043d\u0435\u0442, \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0443\u0434\u0430-\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041f\u043b\u044e\u0441 <code>bigint<\/code> \u0432 JSON-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 <a href=\"https:\/\/github.com\/samchon\/typia\/issues\/444\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d \u044f\u0432\u043d\u043e<\/a>, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043d\u043e\u0432\u0430 \u0440\u0443\u043a\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u2014 \u0431\u0435\u0440\u0438\u0442\u0435.<\/p>\n<p><a href=\"https:\/\/effect.website\/\" rel=\"noopener noreferrer nofollow\"><strong>Effect Schema<\/strong><\/a> \u0436\u0438\u0432\u0451\u0442 \u0441 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u0434\u0435\u043a\u0430\u043c\u0438 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e, \u0438 \u0432 v4 \u0443 \u043d\u0435\u0433\u043e \u0441\u0430\u043c\u044b\u0439 \u0441\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 Sury. \u0418\u0434\u0438\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u2014 <code>toCodecJson<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0437 \u043b\u044e\u0431\u043e\u0439 \u0441\u0445\u0435\u043c\u044b JSON-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0443\u044e:<\/p>\n<pre><code>const codec = S.toCodecJson(S.Struct({ id: S.BigInt, at: S.Date }));S.encodeSync(codec)({ id: 42n, at: new Date(\"2026-01-15T10:30:00Z\") });\/\/ =&gt; { id: \"42\", at: \"2026-01-15T10:30:00.000Z\" }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>bigint<\/code>, <code>Date<\/code> \u0438 <code>Uint8Array<\/code> \u0440\u0430\u0437\u0440\u0443\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u0438, \u0438 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0441\u0445\u0435\u043c\u044b \u043d\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435, \u2014 \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 JSON \u0431\u044b\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442: <code>Infinity<\/code> \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <code>\"Infinity\"<\/code> \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0440\u0430\u0441\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u044c. \u0415\u0441\u043b\u0438 \u043d\u0430 \u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043d\u0446\u0430\u0445 Effect \u2014 \u043e\u0442\u043b\u0438\u0447\u043d\u043e, \u0430 \u0432\u043e\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0436\u0434\u0430\u043b \u0442\u0430\u043c \u0447\u0438\u0441\u043b\u043e, \u0443\u0434\u0438\u0432\u0438\u0442\u0441\u044f. Sury \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043f\u0430\u0434\u0430\u0435\u0442, \u0438 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API \u044d\u0442\u043e, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435, \u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 Effect \u0432\u0440\u0430\u043d\u044c\u0451\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u0447\u0435\u0441\u0442\u043d\u043e: \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041f\u0440\u0438 \u0432\u0441\u0451\u043c \u044d\u0442\u043e\u043c \u0440\u043e\u0430\u0441\u0442\u0435 Effect v4 \u044f \u0431\u044b \u043d\u0430\u0437\u0432\u0430\u043b \u043b\u0443\u0447\u0448\u0435\u0439 TypeScript-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 2026 \u0433\u043e\u0434\u0430, \u0430 Effect Schema \u2014 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c, \u0435\u0441\u043b\u0438 Effect \u0443 \u0432\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c.<\/p>\n<p><a href=\"https:\/\/zod.dev\/codecs\" rel=\"noopener noreferrer nofollow\"><strong>Zod<\/strong><\/a> \u043e\u0431\u0437\u0430\u0432\u0451\u043b\u0441\u044f \u043a\u043e\u0434\u0435\u043a\u0430\u043c\u0438 \u0432 4.1 \u0438 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0431\u043b\u0438\u0436\u0435 \u0432\u0441\u0435\u0445:<\/p>\n<pre><code>z.encode(schema, { price: Infinity, name: \"a\" }); \/\/ \u274c throws<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0430\u0432\u0434\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e <code>z.number()<\/code> \u0438 \u0442\u0430\u043a \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 <code>NaN<\/code> \u0438 <code>Infinity<\/code>, \u0430 \u043d\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043e\u043d \u0432 \u043a\u0443\u0440\u0441\u0435, \u0447\u0442\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 JSON. \u0410 \u0434\u043b\u044f <code>bigint<\/code> \u0438\u043b\u0438 <code>Date<\/code> \u043a\u043e\u0434\u0435\u043a\u0438 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0445\u0435\u043c\u0435. \u042d\u0442\u043e \u043d\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e \u2014 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e <code>JSON.stringify<\/code> \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043b\u0438 \u00abJSON-\u0441\u0442\u0440\u043e\u043a\u0430\u00bb \u0442\u043e\u0436\u0435 \u043d\u0435\u0442, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 encode \u043f\u043e \u0441\u0445\u0435\u043c\u0435 \u0437\u0432\u0430\u0442\u044c <code>JSON.stringify<\/code> \u0443\u0436\u0435 \u043d\u0435 \u043e\u043f\u0430\u0441\u043d\u043e. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0430 Zod \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0430 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0433\u043e\u043b\u043e\u0433\u043e stringify.<\/p>\n<p><a href=\"https:\/\/github.com\/fastify\/fast-json-stringify\" rel=\"noopener noreferrer nofollow\"><strong>fast-json-stringify<\/strong><\/a> (\u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439, \u043e\u0442 Fastify) \u2014 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439, \u043d\u043e \u0447\u0430\u0441\u0442\u044c \u0432\u0440\u0430\u043d\u044c\u044f \u043e\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0435\u0433\u043e:<\/p>\n<pre><code>const stringify = fastJson({  type: \"object\",  properties: { price: { type: \"number\" }, name: { type: \"string\" } },  required: [\"price\", \"name\"],});stringify({ price: Infinity, name: \"a\" }); \/\/ =&gt; '{\"price\":null,\"name\":\"a\"}'   \u0432\u0441\u0451 \u0435\u0449\u0451 \u043f\u043e\u0440\u0442\u0438\u0442stringify({ price: NaN, name: \"a\" }); \/\/ =&gt; throws: The value \"NaN\" cannot be converted to a numberstringify({ price: 1, name: 42 }); \/\/ =&gt; '{\"price\":1,\"name\":\"42\"}'     \u043c\u043e\u043b\u0447\u0430 \u043f\u0440\u0438\u0432\u0451\u043b \u0442\u0438\u043f<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0430\u0433 \u2014 \u0432 \u0442\u0438\u043f\u0430\u0445 \u043f\u0440\u044f\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e <code>StringCoercible = string | Date | RegExp<\/code> \u2014 \u043d\u043e \u044f \u043d\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0445\u0435\u043c\u0430 \u0434\u043e TypeScript \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u0442:<\/p>\n<pre><code>\/\/ fast-json-stringify \u2014 &lt;TDoc extends object = object&gt;(doc: TDoc) =&gt; stringstringify({ totally: \"unrelated\", nonsense: 123 }); \/\/ \u2705 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, strict mode\/\/ Sury \u2014 (data: { price: number; name: string }) =&gt; stringencode({ totally: \"unrelated\", nonsense: 123 });\/\/ =&gt; TS2353: 'totally' does not exist in type '{ price: number; name: string }'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0412 \u044d\u043f\u043e\u0445\u0443 AI \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0441\u0445\u0435\u043c\u0435, \u2014 \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0443\u0442\u044c \u043a \u0432\u0435\u0441\u0451\u043b\u044b\u043c \u0431\u0430\u0433\u0430\u043c. \u0423 <a href=\"https:\/\/github.com\/DZakh\/sury\" rel=\"noopener noreferrer nofollow\"><strong>Sury<\/strong><\/a>, \u043a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u0442\u044c <code>S.fromJSONSchema<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0442\u0438\u043f\u044b \u0434\u0430\u0436\u0435 \u0438\u0437 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 JSON Schema. <code>fast-json-stringify<\/code> \u044f \u0431\u044b \u043d\u0435 \u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u043b: \u043d\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043d\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u043e\u043d \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u0432\u0441\u0451 \u0440\u044f\u0434\u043e\u043c:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u0434\u0438\u0440\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 <code>{ price, name }<\/code><\/p>\n<\/th>\n<th>\n<p align=\"left\"><strong>Sury<\/strong><\/p>\n<\/th>\n<th>\n<p align=\"left\">Effect Schema<\/p>\n<\/th>\n<th>\n<p align=\"left\">Zod<\/p>\n<\/th>\n<th>\n<p align=\"left\">typia<\/p>\n<\/th>\n<th>\n<p align=\"left\">fast-json-stringify<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Infinity<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2b55 \u0441\u0442\u0440\u043e\u043a\u0430 <code>\"Infinity\"<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c <code>null<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0442\u0438\u043f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c \u043c\u043e\u043b\u0447\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043f\u0430\u0434\u0430\u0435\u0442 (\u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u044f)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>bigint<\/code> \/ <code>Date<\/code> \u043a\u0430\u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u0440\u0443\u043a\u0430\u043c\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c <code>bigint<\/code> \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041b\u0438\u0448\u043d\u0438\u0435 \u043f\u043e\u043b\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043e\u0442\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043e\u0442\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043e\u0442\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043e\u0442\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u043e\u0442\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0445\u0435\u043c\u0430 \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e TypeScript<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0442\u0438\u043f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0423\u043c\u0435\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705 \u0442\u0430 \u0436\u0435 \u0441\u0445\u0435\u043c\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u0448\u0430\u0433\u0430 \u0441\u0431\u043e\u0440\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u274c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2705<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">min+gzip<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>16.4 kB<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">23.5 kB<\/p>\n<\/td>\n<td>\n<p align=\"left\">19.4 kB<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u0438\u043d\u043b\u0430\u0439\u043d\u0435\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">56.7 kB<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0430\u0437\u043c\u0435\u0440\u044b \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u0441 tree-shaking. <code>fast-json-stringify<\/code> \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439, \u043a\u0442\u043e \u043f\u043e\u0440\u0442\u0438\u0442 \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u043b\u0447\u0430; <a href=\"https:\/\/ajv.js.org\/\" rel=\"noopener noreferrer nofollow\">Ajv<\/a> \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c \u0440\u0435\u0448\u0430\u0435\u0442 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0437\u0430 46 \u0431\u0430\u0439\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0430 Ajv \u0443 \u043d\u0435\u0433\u043e \u0438 \u0442\u0430\u043a \u0435\u0441\u0442\u044c.<\/p>\n<h3>\u0427\u0430\u0441\u0442\u044c 4: \u00ab\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442?\u00bb<\/h3>\n<p>\u0420\u043e\u0432\u043d\u043e \u044d\u0442\u043e\u0442 \u0441\u043f\u043e\u0440 \u0431\u044b\u043b \u043b\u0435\u0442 \u043f\u044f\u0442\u044c \u043d\u0430\u0437\u0430\u0434, \u043a\u043e\u0433\u0434\u0430 \u0441\u0445\u0435\u043c\u044b \u0434\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u0438 \u0440\u0430\u0441\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c. \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0442\u0430 \u0436\u0435: \u0432\u044b \u0434\u043e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0435 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0437\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435. \u041d\u043e \u044f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e \u043e\u0431\u043c\u0435\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0433\u043e\u0434\u043d\u044b\u043c \u2014 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0432 \u043f\u043b\u044e\u0441, \u0430 \u043d\u0435 \u0432 \u043c\u0438\u043d\u0443\u0441.<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a, \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0435, \u0433\u0434\u0435 \u044f \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u0434\u0438\u0440\u0443\u0435\u043c \u0432 JSON-\u0441\u0442\u0440\u043e\u043a\u0443<\/p>\n<\/th>\n<th>\n<p align=\"left\"><strong>Sury<\/strong><\/p>\n<\/th>\n<th>\n<p align=\"left\"><code>JSON.stringify<\/code><\/p>\n<\/th>\n<th>\n<p align=\"left\">Effect<\/p>\n<\/th>\n<th>\n<p align=\"left\">Zod<\/p>\n<\/th>\n<th>\n<p align=\"left\">typia<\/p>\n<\/th>\n<th>\n<p align=\"left\">fast-json-stringify<\/p>\n<\/th>\n<th>\n<p align=\"left\">devalue \/ superjson<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0442\u0432\u0435\u0442 API (\u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, 7 \u043f\u043e\u043b\u0435\u0439)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>262 ns<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">413 ns<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.19 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">530 ns<\/p>\n<\/td>\n<td>\n<p align=\"left\">277 ns<\/p>\n<\/td>\n<td>\n<p align=\"left\">279 ns<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.36 &#8212; 3.68 \u00b5s<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u043f\u0438\u0441\u043e\u0447\u043d\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 (100 \u0441\u0442\u0440\u043e\u043a)<\/p>\n<\/td>\n<td>\n<p align=\"left\">10.20 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>10.15 \u00b5s<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">67.80 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">16.90 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">10.62 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">10.92 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">121 &#8212; 196 \u00b5s<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041b\u0435\u043d\u0442\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 (50 tagged-union \u0441\u043e\u0431\u044b\u0442\u0438\u0439)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>3.49 \u00b5s<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">4.74 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">41.36 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">9.77 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">6.12 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">13.15 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">52 &#8212; 96 \u00b5s<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u043c\u0435\u0442\u0440\u0438\u043a (50 \u0447\u0438\u0441\u0435\u043b)<\/p>\n<\/td>\n<td>\n<p align=\"left\">8.26 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>4.70 \u00b5s<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">22.30 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">14.70 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">19.92 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">8.98 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">24 &#8212; 34 \u00b5s<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u043b\u0435\u0439\u0431\u043b\u043e\u0432 (50 \u0441\u0442\u0440\u043e\u043a)<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>3.80 \u00b5s<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">3.92 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">11.71 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">14.49 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">19.18 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">7.96 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">23 &#8212; 33 \u00b5s<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>bigint<\/code> id + \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 payload + <code>Date<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>989 ns<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">1.13 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.57 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.48 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.15 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.13 \u00b5s<\/p>\n<\/td>\n<td>\n<p align=\"left\">3.28 &#8212; 5.48 \u00b5s<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u0430\u0436\u043d\u043e! \u042f \u043d\u0435 \u0437\u043e\u0432\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 <a href=\"https:\/\/github.com\/DZakh\/sury\" rel=\"noopener noreferrer nofollow\">Sury<\/a> \u0440\u0430\u0434\u0438 \u043d\u0430\u043d\u043e\u0441\u0435\u043a\u0443\u043d\u0434. \u0421\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <code>JSON.stringify<\/code> \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d, \u0430 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442: \u043f\u0440\u043e\u0441\u0430\u0434\u043a\u0438 \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0430 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u0430\u043d\u0435\u0442 \u0434\u0430\u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u2014 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c, \u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043d\u0435\u0441\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0431\u043e\u043d\u0443\u0441\u043e\u043c, \u0435\u0441\u043b\u0438 \u0440\u0435\u0448\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0442\u044c.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e\u043a\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0433\u043e\u043b\u043e\u0433\u043e <code>JSON.stringify<\/code>, \u043d\u043e \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432. \u041c\u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438 <a href=\"https:\/\/github.com\/DZakh\/sury\" rel=\"noopener noreferrer nofollow\">Sury<\/a> \u044d\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442. \u0414\u0443\u043c\u0430\u044e, \u0437\u0430 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u0442\u0441\u044f, \u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043d\u043e\u0440\u043c\u043e\u0439, \u043a\u0430\u043a \u0432 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433.<\/p>\n<h3>\u0427\u0430\u0441\u0442\u044c 5: \u043a\u0430\u043a \u044f \u043e\u0431\u043e\u0433\u043d\u0430\u043b JSON.stringify \u0441 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u043c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435\u043c<\/h3>\n<p><code>JSON.stringify<\/code> \u2014 \u044d\u0442\u043e C++ \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0432\u0438\u0436\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043b\u0438\u0437\u044b\u0432\u0430\u043b\u0438 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043b\u0435\u0442. \u0420\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e, \u0437\u0430 \u0441\u0447\u0451\u0442 \u0447\u0435\u0433\u043e <a href=\"https:\/\/github.com\/DZakh\/sury\" rel=\"noopener noreferrer nofollow\">Sury<\/a> \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<p><strong>JIT.<\/strong> Sury \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u0447\u0435\u0440\u0435\u0437 <code>new Function<\/code>. \u041f\u043e\u0434\u0445\u043e\u0434 \u043e\u0431\u043a\u0430\u0442\u0430\u043d\u043d\u044b\u0439, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435\u0442. \u0422\u0430\u043a \u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 TypeBox, Zod v4 \u0438 ArkType, \u0434\u0430 \u0438 Cloudflare Workers \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043b\u0438 <code>eval<\/code>.<\/p>\n<p><strong>\u0421\u0445\u0435\u043c\u0430 \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443.<\/strong> <code>JSON.stringify<\/code> \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0437\u0430\u043d\u043e\u0432\u043e \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442 \u0444\u043e\u0440\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u043a\u043b\u044e\u0447\u0438, \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0442\u0438\u043f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438. Sury \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u2014 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u044d\u043d\u043a\u043e\u0434\u0435\u0440. \u0412 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u043e\u043a, \u0430 \u0435\u0451 \u0434\u0432\u0438\u0436\u043a\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0442 \u043d\u0438\u0447\u0443\u0442\u044c \u043d\u0435 \u0445\u0443\u0436\u0435.<\/p>\n<p><strong>\u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/strong> \u0412\u043e\u0442 \u043f\u0440\u043e \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0430\u043f\u043f\u0435\u0440\u044b \u0440\u0443\u043a\u0430\u043c\u0438, \u0432\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u2014 <code>{ id: String(id), at: at.toISOString() }<\/code> \u2014 \u0438 \u043e\u0442\u0434\u0430\u0451\u0442\u0435 \u0435\u0433\u043e \u0432 <code>JSON.stringify<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u0437\u0430\u043d\u043e\u0432\u043e. \u0410\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u043f\u043b\u044e\u0441 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0445\u043e\u0434. Sury \u0441\u0440\u0430\u0437\u0443 \u043f\u0438\u0448\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443.<\/p>\n<p><strong>\u0410 \u0442\u0430\u043c, \u0433\u0434\u0435 <\/strong><code><strong>JSON.stringify<\/strong><\/code><strong> \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442, Sury \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u043e\u0432\u0451\u0442 \u0435\u0433\u043e.<\/strong> \u0414\u043b\u0438\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438, \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434, \u043f\u043e\u0434\u0434\u0435\u0440\u0435\u0432\u044c\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u0442\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 JSON. \u0413\u043e\u0440\u0434\u043e\u0441\u0442\u044c \u0442\u0443\u0442 \u043d\u0438 \u043f\u0440\u0438 \u0447\u0451\u043c \ud83d\ude01<\/p>\n<h3>\u041f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f<\/h3>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0430\u043c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f <a href=\"https:\/\/github.com\/colinhacks\/zod\" rel=\"noopener noreferrer nofollow\">Zod<\/a>, <a href=\"https:\/\/valibot.dev\/\" rel=\"noopener noreferrer nofollow\">Valibot<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/github.com\/sinclairzx81\/typebox\" rel=\"noopener noreferrer nofollow\">TypeBox<\/a>, \u0438 \u0432\u0440\u044f\u0434 \u043b\u0438 \u0432\u044b \u043f\u043e\u0431\u0435\u0436\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u0435\u0446 \u043d\u0430 dev.to \u0440\u0430\u0437\u043d\u0451\u0441 <code>JSON.stringify<\/code>\u2026<\/p>\n<p>\u0418 \u043d\u0435 \u043d\u0430\u0434\u043e. \u0412\u0441\u0451, \u0447\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c JSON Schema, \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0434\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u0445\u0435\u043c\u044b \u0432 <a href=\"https:\/\/github.com\/DZakh\/sury\" rel=\"noopener noreferrer nofollow\">Sury<\/a> \u2014 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439, \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u044d\u043d\u043a\u043e\u0434\u0435\u0440:<\/p>\n<pre><code>const surySchema = S.fromJSONSchema(  yourExistingSchema[\"~standard\"].jsonSchema.input({ target: \"draft-07\" }),);S.encoder(surySchema, S.jsonString); \/\/ \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u044d\u043d\u043a\u043e\u0434\u0435\u0440 \u0432 JSON-\u0441\u0442\u0440\u043e\u043a\u0443S.encoder(surySchema, S.json); \/\/ \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u044d\u043d\u043a\u043e\u0434\u0435\u0440 \u0432 JSONS.encoder(S.any, surySchema, S.json); \/\/ \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u043d\u043e \u0441 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0435\u0439S.assert(surySchema, data); \/\/ \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0441 \u043f\u0443\u0442\u044f\u043c\u0438 \u0432 \u043e\u0448\u0438\u0431\u043a\u0430\u0445<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0445\u0435\u043c\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043b\u0435\u0436\u0430\u043b\u0438. <a href=\"https:\/\/github.com\/DZakh\/sury\" rel=\"noopener noreferrer nofollow\">Sury<\/a> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0435\u043b\u0435\u043c \u0432 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u043c \u0441\u043b\u043e\u0435 \u2014 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430 \u0433\u043e\u0440\u044f\u0447\u0435\u0439 \u0440\u0443\u0447\u043a\u0435, \u0443 \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u2014 \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0435\u0442\u0435. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u043e\u0432\u0435\u0449\u0430\u043d\u0438\u0439 \u043f\u0440\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e.<\/p>\n<p>(\u0415\u0441\u043b\u0438 <a href=\"https:\/\/standardschema.dev\/json-schema\" rel=\"noopener noreferrer nofollow\"><em>Standard JSON Schema<\/em><\/a> \u0432\u0430\u043c \u043f\u043e\u043a\u0430 \u043d\u0438 \u043e \u0447\u0451\u043c \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442: \u044d\u0442\u043e \u0441\u043f\u0435\u043a\u0430, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0451 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0436\u0434\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433 \u043e \u0434\u0440\u0443\u0433\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e\u0442. \u041f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u2014 \u043f\u0440\u043e \u043d\u0435\u0451 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f.)<\/p>\n<h3>\u041f\u043e\u0434\u0432\u043e\u0434\u044f \u0438\u0442\u043e\u0433<\/h3>\n<p>\u042f \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0432\u0441\u0451 \u0441\u043b\u043e\u043c\u0430\u043d\u043e. \u041a\u0443\u0447\u0430 \u0441\u043e\u0444\u0442\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0436\u0438\u0432\u0451\u0442 \u043d\u0430 <code>JSON.stringify<\/code> \u0432\u0441\u0435 \u043f\u044f\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u043b\u0435\u0442, \u0447\u0442\u043e \u043e\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<p>\u041d\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 <code>null<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u0447\u0438\u0441\u043b\u0430, \u0434\u0430\u0442\u0443, \u043f\u0440\u0438\u0435\u0445\u0430\u0432\u0448\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0438\u043b\u0438 \u043f\u043e\u043b\u0435, \u043f\u043e\u0442\u0435\u0440\u044f\u0432\u0448\u0435\u0435\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438, \u2014 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u044c\u0438\u0445 \u044d\u0442\u043e \u0440\u0443\u043a \u0434\u0435\u043b\u043e \u0438 \u0447\u0442\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442\u044c \u0432\u0430\u0441 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f.<\/p>\n<p>\u041d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043d\u0430 <em>\u0432\u0445\u043e\u0434\u0435<\/em> \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0434\u0430\u0432\u043d\u043e. \u041f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0438\u043c \u0438 \u043d\u0430 <em>\u0432\u044b\u0445\u043e\u0434\u0435<\/em>.<\/p>\n<p><strong>Encode, don\u2019t <\/strong><code><strong>JSON.stringify<\/strong><\/code><strong>.<\/strong> &#8212; Cheers \ud83d\ude4f<\/p>\n<hr\/>\n<p><strong>Sury<\/strong> \u043b\u0435\u0436\u0438\u0442 <a href=\"https:\/\/github.com\/DZakh\/sury\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 GitHub<\/a> &#8212; \u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u0430 \u043f\u0440\u0430\u0432\u0434\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438 \u043c\u043e\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435. \u0415\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u2014 <a href=\"https:\/\/github.com\/DZakh\/sury\/issues\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0432\u043e\u0434\u0438\u0442\u0435 issue<\/a> \u0438\u043b\u0438 \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 <a href=\"https:\/\/x.com\/dzakh_dev\" rel=\"noopener noreferrer nofollow\">X<\/a>. \ud83e\uddec<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1070394\/\">https:\/\/habr.com\/ru\/articles\/1070394\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u043b\u0435\u0442 5-7 \u043d\u0430\u0437\u0430\u0434 \u0432\u0441\u0435 \u0441\u0438\u0434\u0435\u043b\u0438 \u043d\u0430 Yup \u0438\u043b\u0438 Ajv \u0438 \u0432\u0441\u0435\u0445 \u0432\u0441\u0451 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u043e? \u041f\u0440\u0438\u0437\u043d\u0430\u044e, \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \ud83e\udee1\u041f\u043e\u0442\u043e\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u201cParse, don\u2019t validate\u201d, \u0441\u0442\u0430\u043b\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043d\u0438\u0433\u043e\u0439 \u0434\u043b\u044f \u043a\u0443\u0447\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u043b\u043e \u0438 \u0443 \u043d\u0430\u0441, \u0432 JavaScript \u0438 TypeScript. \u0422\u044b\u0441\u044f\u0447\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0441\u043e \u0441\u0445\u0435\u043c\u0430\u043c\u0438 \u2014 \u043b\u0443\u0447\u0448\u0435\u0435 \u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \ud83d\ude01\u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0440\u0435\u0448\u0451\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u044b \u043e\u0442\u043a\u0440\u044b\u043b\u0438 \u043d\u0435 \u0440\u0430\u0434\u0438 \u043d\u0435\u0451. \u0410 \u0432\u043e\u0442 \u0447\u0442\u043e \u043d\u0435 \u0440\u0435\u0448\u0435\u043d\u043e:\u201cEncode, don\u2019t stringify\u201d\u0418\u043b\u0438, \u043f\u0440\u043e\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f: \u041d\u0418\u041a\u041e\u0413\u0414\u0410 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 JSON.stringify \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u0434\u0435. &#8212; \u0414\u0430, \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u044d\u0442\u043e \u0437\u0432\u0443\u0447\u0438\u0442 \u0434\u0435\u0440\u0437\u043a\u043e!\u0421\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u043a\u0430\u0436\u0443 \u2014 \u0438, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0441\u0434\u0435\u043b\u0430\u044e \u044d\u0442\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u0434\u043b\u044f JavaScript-\u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0435\u043c \u0436\u0435, \u0447\u0435\u043c \u0432 2019-\u043c \u0441\u0442\u0430\u043b\u043e \u201cParse, don\u2019t validate\u201d. \u041f\u043e\u0435\u0445\u0430\u043b\u0438!FAQ \u043f\u0435\u0440\u0435\u0434 \u0441\u0442\u0430\u0440\u0442\u043e\u043c\u00ab\u041d\u0438\u043a\u043e\u0433\u0434\u0430? \u0421\u043e\u0432\u0441\u0435\u043c?\u00bb \u0414\u0430. \u0415\u043c\u0443 \u043c\u0435\u0441\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u0430, \u043a\u0430\u043a \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u0434\u0435 \u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0435.\u041a\u0442\u043e \u0442\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0430\u043a\u043e\u0439? \u042f \u0414\u043c\u0438\u0442\u0440\u0438\u0439 &#8212; \u0434\u0435\u043b\u0430\u044e \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441 \u0441 \u0443\u043f\u043e\u0440\u043e\u043c \u043d\u0430 DX \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0441\u043e\u0441\u0442\u043e\u044e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 ReScript Lang \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043b Sury, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435.\u00ab\u0422\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u043a\u043b\u0430\u043c\u0430?\u00bb \u0427\u0430\u0441\u0442\u0438\u0447\u043d\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0439\u0434\u0451\u0442 \u0440\u0435\u0447\u044c, \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f, \u0438 \u043e\u0431\u0437\u043e\u0440 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0447\u0435\u0441\u0442\u043d\u044b\u043c. Sury \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0434\u0435\u043b\u0430\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 4.5 \u0433\u043e\u0434\u0430, \u0438 \u044f \u043f\u0440\u0430\u0432\u0434\u0430 \u0441\u0447\u0438\u0442\u0430\u044e \u0435\u0451 \u043b\u0443\u0447\u0448\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f. \u041d\u043e \u0432\u0430\u0436\u043d\u0430 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u0430\u043c\u0430 \u0438\u0434\u0435\u044f: \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0441 \u201cParse, don\u2019t validate\u201d, \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 \u0441\u0442\u0430\u043d\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0435.\u0411\u0443\u0434\u0443 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0435\u043d \u0437\u0430 \u0440\u0435\u043f\u043e\u0441\u0442, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u0439\u0434\u0451\u0442 \ud83d\ude4f \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u043a\u0430\u0447\u0430\u0435\u043c \u201cEncode, don\u2019t stringify\u201d!\u0427\u0430\u0441\u0442\u044c 1: \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0435 \u0432\u0440\u0430\u043d\u044c\u0451\u0427\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 JSON.stringify, \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432\u044b? \u0421 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0441\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0421\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u043c. \u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u0437\u0430 7 \u043b\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f \u0441\u043e\u0431\u0440\u0430\u043b \u0432\u0441\u0435 \u0433\u0440\u0430\u0431\u043b\u0438, \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0436\u043d\u043e. \u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0435\u0441\u043b\u0438 \u0432\u0430\u043c JSON.stringify \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0441\u043e\u0432\u0440\u0430\u043b &#8212; \u044f \u0443\u0434\u0438\u0432\u043b\u044e\u0441\u044c \ud83d\udc40\u041e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 undefinedJSON.stringify(undefined);\/\/ =&gt; undefinedJSON.stringify(() =&gt; {});\/\/ =&gt; undefined\u041a\u0442\u043e-\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u0442: \u043d\u0443 \u0438 \u043b\u0430\u0434\u043d\u043e. \u041d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0442\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f:stringify(value: any, replacer?: &#8230;, space?: &#8230;): string;\u041e\u0441\u043e\u0431\u0443\u044e \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 any \u043d\u0430 \u0432\u0445\u043e\u0434\u0435. \u0414\u0443\u043c\u0430\u044e, \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e.\u0415\u0441\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 ts-reset, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043e\u043d \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442: \u043e\u043d \u0447\u0438\u043d\u0438\u0442 JSON.parse, \u0430 \u0434\u043b\u044f JSON.stringify \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435.\u041e\u043d \u043f\u0430\u0434\u0430\u0435\u0442JSON.stringify({ id: 1n });\/\/ =&gt; TypeError: Do not know how to serialize a BigIntconst user = {};user.self = user;JSON.stringify(user);\/\/ =&gt; TypeError: Converting circular structure to JSONlet root = {},  node = root;for (let i = 0; i &lt; 50000; i++) node = node.next = {};JSON.stringify(root);\/\/ =&gt; RangeError: Maximum call stack size exceeded\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u2014 \u0443\u0436\u0435 \u044d\u043a\u0437\u043e\u0442\u0438\u043a\u0430 \u0438 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e \u0442\u0435\u043c\u0443 \u0441\u0442\u0430\u0442\u044c\u0438, \u043d\u043e \u043f\u0443\u0441\u0442\u044c \u0442\u043e\u0436\u0435 \u043f\u043e\u043b\u0435\u0436\u0430\u0442 \u0432 \u043a\u043e\u043f\u0438\u043b\u043a\u0435 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a.\u041f\u043e \u043e\u0448\u0438\u0431\u043a\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c\u0410 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u0430\u0434\u0430\u0435\u0442, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u044f\u0442\u043a\u0438:JSON.stringify({ user: { orders: [{ total: 1n }] } });\/\/ =&gt; TypeError: Do not know how to serialize a BigInt\u041a\u0430\u043a\u043e\u0439 \u0437\u0430\u043a\u0430\u0437, \u043a\u0430\u043a\u043e\u0435 \u043f\u043e\u043b\u0435 \u2014 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0438 \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e res.json(). \u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e.\u041e\u043d \u043c\u043e\u043b\u0447\u0430 \u043f\u043e\u0440\u0442\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435\u0410 \u0432\u043e\u0442 \u043d\u0430 \u044d\u0442\u043e\u043c \u0445\u043e\u0447\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0434\u0435\u043d\u0435\u0433. \u041d\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u044f, \u043d\u0438 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f, \u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0442\u044f\u0436\u0435\u043b\u043e:JSON.stringify({ price: Infinity }); \/\/ =&gt; &#8216;{&#171;price&#187;:null}&#8217;JSON.stringify({ price: NaN }); \/\/ =&gt; &#8216;{&#171;price&#187;:null}&#8217;\/\/ \u0413\u0434\u0435-\u0442\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0438\u043b\u0430\u0441\u044c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430, \u0430 \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435 \u043f\u0443\u0441\u0442\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0438\u043b\u0438 \u043f\u0430\u0434\u0435\u043d\u0438\u0435JSON.stringify({ a: undefined, b: 1 }); \/\/ =&gt; &#8216;{&#171;b&#187;:1}&#8217;      \u043a\u043b\u044e\u0447 \u043f\u0440\u043e\u043f\u0430\u043bJSON.stringify([1, undefined, 2]); \/\/ =&gt; &#8216;[1,null,2]&#8217;   \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u0443\u0436\u0435 nullJSON.stringify([1, () =&gt; {}, 2]); \/\/ =&gt; &#8216;[1,null,2]&#8217;\/\/ \u0414\u043b\u044f \u0432\u0430\u0441, \u043c\u043e\u0436\u0435\u0442, \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e, \u0430 \u0432\u043e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 T | null \u043d\u0430 \u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0441\u044fJSON.stringify({ m: new Map([[&#171;a&#187;, 1]]) }); \/\/ =&gt; &#8216;{&#171;m&#187;:{}}&#8217;JSON.stringify({ s: new Set([1, 2]) }); \/\/ =&gt; &#8216;{&#171;s&#187;:{}}&#8217;\/\/ \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u0447\u0435\u0437\u043b\u0438, \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435\u0442JSON.stringify({ b: new Uint8Array([1, 2, 3]) });\/\/ =&gt; &#8216;{&#171;b&#187;:{&#171;0&#8243;:1,&#187;1&#8243;:2,&#187;2&#187;:3}}&#8217;\/\/ \u041c\u0430\u0441\u0441\u0438\u0432 \u0431\u0430\u0439\u0442\u043e\u0432 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c\u0421\u0430\u043c\u043e\u0435 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u2014 \u0447\u0442\u043e \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e, \u0438 TypeScript \u0442\u0443\u0442 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043a\u0440\u043e\u0435\u0442.\u041e\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u0451 \u043f\u043e\u0434\u0440\u044f\u0434JSON.stringify({ login: &#171;hello&#187;, _internalSecret: &#171;1232&#187; });\/\/ =&gt; &#8216;{&#171;login&#187;:&#187;hello&#187;,&#187;_internalSecret&#187;:&#187;1232&#8243;}&#8217;\u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u043d\u0435\u0442: \u0447\u0442\u043e \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0435, \u0442\u043e \u0438 \u0443\u0435\u0434\u0435\u0442 \u043d\u0430\u0440\u0443\u0436\u0443. \u041f\u0440\u044f\u043c\u043e \u0441\u0435\u043a\u0440\u0435\u0442\u044b \u0432\u044b \u0442\u0430\u043c \u0432\u0440\u044f\u0434 \u043b\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0435, \u0430 \u0432\u043e\u0442 \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u2014 \u043b\u0435\u0433\u043a\u043e.\u0427\u0430\u0441\u0442\u044c 2: encode, don\u2019t stringify\u0420\u0430\u0437 \u0432\u044b \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e\u0441\u044e\u0434\u0430, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441 \u043a\u0430\u043a\u0438\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0440\u0430\u043d\u044c\u0451\u043c JSON.stringify \u0432\u044b \u0443\u0436\u0435 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c. \u0420\u0430\u0434 \u0432\u0438\u0434\u0435\u0442\u044c \ud83e\udd1d\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435, \u0438 \u043c\u044b\u0441\u043b\u044c \u0440\u043e\u0432\u043d\u043e \u0442\u0430 \u0436\u0435, \u0447\u0442\u043e \u0432 \u201cParse, don\u2019t validate\u201d: JSON.stringify \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u043c\u0438 \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0440\u0443\u0436\u0443, \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u044d\u043d\u043a\u043e\u0434\u0435\u0440 \u2014 \u043e\u043d \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON \u0438\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443:type user = {  name : string;  age : int;}let user_to_json { name; age } =  `Assoc [    (&#171;name&#187;, `String name);    (&#171;age&#187;, `Int age);  ]let json = user_to_json { name = &#171;Alice&#187;; age = 42 }let output = Yojson.Safe.to_string json(* {&#171;name&#187;:&#187;Alice&#187;,&#187;age&#187;:42} *)\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 OCaml \u044f \u0432\u0437\u044f\u043b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u043c\u0443 \u0441\u0443\u0442\u044c \u0438 \u0442\u043e, \u043a\u0430\u043a \u0441 \u044d\u0442\u0438\u043c \u0433\u043e\u0434\u0430\u043c\u0438 \u0436\u0438\u0432\u0443\u0442 \u0432 \u00ab\u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445\u00bb \u044f\u0437\u044b\u043a\u0430\u0445. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043b\u0438\u0448\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u043d\u043a\u043e\u0434\u0435\u0440\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u2014 \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 Typia \u0443 \u043d\u0430\u0441.\u041c\u043d\u0435 \u0431\u043b\u0438\u0436\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u043e \u0441\u0445\u0435\u043c\u043e\u0439 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435. \u0412\u0441\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 JS-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441\u0445\u0435\u043c \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043f\u0440\u0430\u0432\u0434\u044b \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0442\u0438\u043f\u043e\u0432 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438. \u0410 \u0440\u0430\u0437 \u0441\u0445\u0435\u043c\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0445 \u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u2014 \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f.\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e Sury \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u0435\u0440\u0432\u044b\u043c \u0432 \u043c\u0438\u0440\u0435 JS-\u0441\u0445\u0435\u043c. \u041e\u0434\u043d\u0430 \u0441\u0445\u0435\u043c\u0430, \u043e\u0431\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:import * as S from &#171;sury&#187;;const schema = S.schema({  id: S.bigint,  at: S.date,  price: S.number,});\/\/? Schema&lt;{id: bigint, at: Date, price: number}, {id: bigint, at: Date, price: number}&gt;const encodeToJsonString = S.encoder(schema, S.jsonString);\/\/? (data: {id: bigint, at: Date, price: number}) =&gt; stringencodeToJsonString({  id: 9007199254740993n,  at: new Date(&#171;2026-01-15T10:30:00.000Z&#187;),  price: 9.99,});\/\/ =&gt; &#8216;{&#171;id&#187;:&#187;9007199254740993&#8243;,&#187;at&#187;:&#187;2026-01-15T10:30:00.000Z&#187;,&#187;price&#187;:9.99}&#8217;\/\/ \u0438\u043b\u0438const encodeToJson = S.encoder(schema, S.json);\/\/? (data: {id: bigint, at: Date, price: number}) =&gt; JSON\/\/ \u0438\u043b\u0438 (\u0441\u043a\u043e\u0440\u043e)const encodeToBase64url = S.encoder(schema, S.base64url);\/\/? (data: {id: bigint, at: Date, price: number}) =&gt; string\/\/ \u0438\u043b\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0440\u0430\u0441\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043eS.decoder(  S.jsonString,  schema,)(&#8216;{&#171;id&#187;:&#187;9007199254740993&#8243;,&#187;at&#187;:&#187;2026-01-15T10:30:00.000Z&#187;,&#187;price&#187;:9.99}&#8217;);\/\/ =&gt; {id: 9007199254740993n, at: new Date(&#171;2026-01-15T10:30:00.000Z&#187;), price: 9.99}\u0422\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 JSON.stringify \u043d\u0435 \u043f\u0435\u0440\u0435\u0432\u0430\u0440\u0438\u0432\u0430\u0435\u0442, \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0441\u0430\u043c\u043e\u0439 \u0441\u0445\u0435\u043c\u044b. \u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0441\u0442\u043d\u043e \u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u043f\u0443\u0442\u0451\u043c \u0434\u043e \u043f\u043e\u043b\u044f, \u0430 \u043d\u0435 \u043f\u043e\u0440\u0442\u044f\u0442\u0441\u044f \u043c\u043e\u043b\u0447\u0430. \u041b\u0438\u0448\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u043e\u0442\u0440\u0435\u0437\u0430\u044e\u0442\u0441\u044f. \u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e.encodeToJsonString({ id: 1n, at: new Date(), price: Infinity });\/\/ =&gt; throws SuryError: Failed at [&#171;price&#187;]: Expected JSON, received Infinity\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u043e\u0436\u0435 \u043d\u0435\u0442 \u2014 encodeToJsonString \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0440\u043e\u0432\u043d\u043e \u043f\u043e\u0434 \u044d\u0442\u0443 \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445:(i) =&gt; {  let v0 = i[&#171;price&#187;];  return (    &#8216;{&#171;id&#187;:&#187;&#8216; +    i[&#171;id&#187;] +    &#8216;&#187;,&#187;at&#187;:&#187;&#8216; +    i[&#171;at&#187;].toISOString() +    &#8216;&#187;,&#187;price&#187;:&#8217; +    (Number.isFinite(v0) ? v0 : e[1](v0)) +    &#171;}&#187;  );};\u042d\u0442\u043e \u0432\u0435\u0441\u044c \u044d\u043d\u043a\u043e\u0434\u0435\u0440 \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435, \u2014 Number.isFinite: \u043f\u0440\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u0438\u0437 unknown \u0442\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e, \u0430 \u043f\u0440\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432 JSON \u0443\u0436\u0435 \u043d\u0435\u0442.\u0427\u0430\u0441\u0442\u044c 3: \u0447\u0442\u043e \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u043d\u0430 \u0440\u044b\u043d\u043a\u0435\u0418\u0434\u0435\u044f \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u044d\u043d\u043a\u043e\u0434\u0435\u0440 \u0438\u0437 \u0441\u0445\u0435\u043c\u044b \u043d\u0435 \u043d\u043e\u0432\u0430\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0439\u0434\u0451\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u2014 \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u043d\u043e\u0439.\u0417\u0430\u0431\u0440\u043e\u0448\u0435\u043d\u043d\u044b\u0435. compile-json-stringify \u0438 slow-json-stringify \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u043b\u0438 \u0441 2022 \u0433\u043e\u0434\u0430, \u0430 @deepkit\/type \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0441\u0431\u043e\u0440\u043a\u0438, \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437 \u0443 \u043d\u0435\u0433\u043e \u0431\u044b\u043b \u0432 \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u0435 2025. \u0427\u0435\u043c \u044d\u0442\u043e \u0433\u0440\u043e\u0437\u0438\u0442: slow-json-stringify \u043d\u0435 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043a\u0430\u0432\u044b\u0447\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 { name: &#8216;he said &#171;hi&#187;&#8216; } \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 {&#171;name&#187;:&#187;he said &#171;hi&#187;&#187;} \u2014 \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442 \u043d\u0438\u043a\u0442\u043e, \u0438 \u0431\u0430\u0433 \u043b\u0435\u0436\u0438\u0442 \u0442\u0430\u043c \u0443\u0436\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0433\u043e\u0434\u0430. \u0411\u0440\u0430\u0442\u044c \u043d\u0435 \u0441\u043e\u0432\u0435\u0442\u0443\u044e.\u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u043e\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b ElysiaJS. json-accelerator \u2014 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u043e\u0442 \u0440\u0435\u0431\u044f\u0442, \u0441\u0434\u0435\u043b\u0430\u0432\u0448\u0438\u0445 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0431\u044b\u0441\u0442\u0440\u044b\u0445 HTTP-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432 \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u041d\u043e \u0432 \u0441\u0430\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043e\u043d \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u043b, \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u043d\u0435 \u0431\u044b\u043b\u043e \u0441 \u0430\u043f\u0440\u0435\u043b\u044f 2025, \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0442\u0430\u043c \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435: \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438, \u0442\u043e \u043e\u043d \u0438 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0442\u0438\u043f\u0443, \u0442\u0430\u043a \u0447\u0442\u043e { price: Infinity } \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0434\u0430\u0451\u0442 {&#171;price&#187;:Infinity} \u2014 \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 JSON. \u0426\u0435\u043b\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u044b\u043b\u0430 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c JSON.stringify, \u0430 \u043d\u0435 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0433\u043e \u0442\u043e\u0436\u0435 \u043c\u0438\u043c\u043e.\u0422\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b. devalue (SvelteKit) \u0438 superjson (tRPC) \u2014 \u0433\u0438\u0433\u0430\u043d\u0442\u044b, \u0432\u043c\u0435\u0441\u0442\u0435 \u043e\u043a\u043e\u043b\u043e 20 \u043c\u043b\u043d \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0432 \u043d\u0435\u0434\u0435\u043b\u044e \u2014 \u0438 \u043e\u043d\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443:const value = {  at: new Date(&#171;2026-01-15T10:30:00Z&#187;),  price: Infinity,  secret: &#171;LEAKED&#187;,};devalue.stringify(value);\/\/ =&gt; [{&#171;at&#187;:1,&#187;price&#187;:-4,&#187;secret&#187;:2},[&#171;Date&#187;,&#187;2026-01-15T10:30:00.000Z&#187;],&#187;LEAKED&#187;]superjson.stringify(value);\/\/ =&gt; {&#171;json&#187;:{&#171;at&#187;:&#187;2026-01-15T10:30:00.000Z&#187;,&#187;price&#187;:&#187;Infinity&#187;,&#187;secret&#187;:&#187;LEAKED&#187;},\/\/     &#171;meta&#187;:{&#171;values&#187;:{&#171;at&#187;:[&#171;Date&#187;],&#187;price&#187;:[&#171;number&#187;]},&#187;v&#187;:1}}\u0423 \u043d\u0438\u0445 bigint, Date, Map \u0438 \u0434\u0430\u0436\u0435 \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0434\u043e\u0435\u0437\u0436\u0430\u044e\u0442 \u0442\u0443\u0434\u0430 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u2014 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430. \u042f \u0431\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0430 \u043a\u043e\u043d\u0446\u0430 \u0432\u0430\u0448\u0438, \u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435. \u041d\u043e \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442: \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c \u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u0439\u043c\u0451\u0442, \u0430 \u0431\u0435\u0437 \u0441\u0445\u0435\u043c\u044b \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0440\u043e\u0432\u043d\u043e \u0442\u0443 \u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0435\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e \u0438 \u0441 JSON.stringify.typia \u0447\u0438\u0442\u0430\u0435\u0442 \u0432\u0430\u0448\u0438 TypeScript-\u0442\u0438\u043f\u044b \u043d\u0430 \u0441\u0431\u043e\u0440\u043a\u0435 \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0437 \u043d\u0438\u0445 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440. typia.json.assertStringify&lt;T&gt;() \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0435\u0442 \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u2014 invalid type on $input.id \u2014 \u0442\u0430\u043a \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u0447\u0435\u0441\u0442\u043d\u043e \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e, \u0430 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0437\u0430\u0438\u043d\u043b\u0430\u0439\u043d\u0435\u043d. \u041f\u043b\u0430\u0442\u0430 \u2014 \u0441\u0431\u043e\u0440\u043a\u0430: \u043d\u0443\u0436\u0435\u043d ttsc \u0438\u043b\u0438 unplugin, \u0438\u0437 \u0447\u0438\u0441\u0442\u043e\u0433\u043e JavaScript \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u0445\u0435\u043c\u044b \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u043d\u0435\u0442, \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0443\u0434\u0430-\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041f\u043b\u044e\u0441 bigint \u0432 JSON-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d \u044f\u0432\u043d\u043e, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u043d\u043e\u0432\u0430 \u0440\u0443\u043a\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u2014 \u0431\u0435\u0440\u0438\u0442\u0435.Effect Schema \u0436\u0438\u0432\u0451\u0442 \u0441 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u0434\u0435\u043a\u0430\u043c\u0438 \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e, \u0438 \u0432 v4 \u0443 \u043d\u0435\u0433\u043e \u0441\u0430\u043c\u044b\u0439 \u0441\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043f\u043e\u0441\u043b\u0435 Sury. \u0418\u0434\u0438\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u2014 toCodecJson, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0437 \u043b\u044e\u0431\u043e\u0439 \u0441\u0445\u0435\u043c\u044b JSON-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0443\u044e:const codec = S.toCodecJson(S.Struct({ id: S.BigInt, at:&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-490911","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/490911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=490911"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/490911\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=490911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=490911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=490911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}