{"id":20916,"date":"2023-05-03T03:30:34","date_gmt":"2023-05-03T00:00:34","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/using-modern-decorators-in-typescript-8nd\/"},"modified":"2023-05-03T03:30:34","modified_gmt":"2023-05-03T00:00:34","slug":"using-modern-decorators-in-typescript-8nd","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/using-modern-decorators-in-typescript-8nd\/","title":{"rendered":"\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u062f\u0631\u0646 \u062f\u0631 TypeScript"},"content":{"rendered":"<div data-article-id=\"1454212\" id=\"article-body\">\n<p><strong>\u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u0627\u0644\u06a9 \u0628\u0631\u0648\u0646\u0644\u270f\ufe0f<\/strong><\/p>\n<p>The State of Developer Ecosystem 2022 \u062a\u0627\u06cc\u067e \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0632\u0628\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0633\u0631\u06cc\u0639\u062a\u0631\u06cc\u0646 \u0631\u0634\u062f \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f.  \u0633\u062e\u062a \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0628\u0641\u0647\u0645\u06cc\u0645 \u0686\u0631\u0627.  \u0627\u06cc\u0646 \u0627\u0628\u0631\u0645\u062c\u0645\u0648\u0639\u0647 \u0645\u062d\u0628\u0648\u0628 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0686\u06a9 \u06a9\u0631\u062f\u0646 \u0646\u0648\u0639\u060c enums \u0648 \u0633\u0627\u06cc\u0631 \u067e\u06cc\u0634\u0631\u0641\u062a\u200c\u0647\u0627 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f.  \u0627\u0645\u0627 \u0627\u063a\u0644\u0628\u060c TypeScript \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u0631\u0627 \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0647\u0646\u0648\u0632 \u0628\u062e\u0634\u06cc \u0627\u0632 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f ECMAScript \u06a9\u0647 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0631 \u0622\u0646 \u062a\u06a9\u06cc\u0647 \u062f\u0627\u0631\u062f\u060c \u0646\u06cc\u0633\u062a\u0646\u062f. <\/p>\n<p>\u06cc\u06a9 \u0645\u062b\u0627\u0644\u060c \u0645\u0639\u0631\u0641\u06cc \u0645\u062c\u062f\u062f \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u062f\u0631 TypeScript 5.0 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0632\u0648\u062f\u06cc \u0645\u0646\u062a\u0634\u0631 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.  decorators \u06cc\u06a9 \u062a\u06a9\u0646\u06cc\u06a9 \u0645\u062a\u0627 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0633\u0627\u06cc\u0631 \u0632\u0628\u0627\u0646 \u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0646\u06cc\u0632 \u06cc\u0627\u0641\u062a \u0645\u06cc \u0634\u0648\u062f.  \u0627\u06af\u0631 \u06cc\u06a9 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u06cc\u0627 \u0646\u0648\u06cc\u0633\u0646\u062f\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0633\u062a\u06cc\u062f \u06a9\u0647 \u0639\u0644\u0627\u0642\u0647\u200c\u0645\u0646\u062f \u0628\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0632\u0626\u06cc\u0646\u0627\u062a \u0631\u0633\u0645\u06cc TypeScript \u062c\u062f\u06cc\u062f \u0647\u0633\u062a\u06cc\u062f\u060c \u0628\u0627\u06cc\u062f \u0627\u0632 \u0646\u062d\u0648 \u062c\u062f\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u062a\u0641\u0627\u0648\u062a\u200c\u0647\u0627\u06cc \u0628\u06cc\u0646 \u0645\u062c\u0645\u0648\u0639\u0647 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0648 \u062c\u062f\u06cc\u062f \u0631\u0627 \u062f\u0631\u06a9 \u06a9\u0646\u06cc\u062f.  \u062a\u0641\u0627\u0648\u062a \u0647\u0627\u06cc API \u06af\u0633\u062a\u0631\u062f\u0647 \u0627\u0633\u062a \u0648 \u0628\u0639\u06cc\u062f \u0627\u0633\u062a \u06a9\u0647 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0642\u062f\u06cc\u0645\u06cc \u0628\u0627 \u0646\u062d\u0648 \u062c\u062f\u06cc\u062f \u062e\u0627\u0631\u062c \u0627\u0632 \u062c\u0639\u0628\u0647 \u06a9\u0627\u0631 \u06a9\u0646\u0646\u062f. <\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u062a\u0627\u0631\u06cc\u062e\u0686\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u062f\u0631 TypeScript \u0631\u0627 \u0645\u0631\u0648\u0631 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0631\u062a\u0628\u0637 \u0628\u0627 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u0631\u0627 \u062f\u0631 TypeScript 5.0 \u0645\u0648\u0631\u062f \u0628\u062d\u062b \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u062f\u0647\u06cc\u0645\u060c \u062f\u0631 \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u062f\u0631\u0646 \u0642\u062f\u0645 \u0645\u06cc\u200c\u0632\u0646\u06cc\u0645\u060c \u0648 \u0686\u06af\u0648\u0646\u06af\u06cc \u0627\u0635\u0644\u0627\u062d \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645. <\/p>\n<p><strong><em>NB\u060c<\/em><\/strong> <em>\u0647\u0645\u0647 API\u0647\u0627 \u062f\u0631 TypeScript 5.0 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0632\u06cc\u0627\u062f\u06cc \u06a9\u0631\u062f\u0647 \u0627\u0646\u062f.  \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0645\u0627 \u0628\u0631 \u0631\u0648\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0631\u0648\u0634 \u06a9\u0644\u0627\u0633 \u062a\u0645\u0631\u06a9\u0632 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f<\/em>.<\/p>\n<p><em>\u067e\u0631\u0634 \u0628\u0647 \u062c\u0644\u0648:<\/em><\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/using-modern-decorators-in-typescript-8nd\/#%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87_%D8%AF%DA%A9%D9%88%D8%B1%D8%A7%D8%AA%D9%88%D8%B1%D9%87%D8%A7%DB%8C_TypeScript\" >\u062a\u0627\u0631\u06cc\u062e\u0686\u0647 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc TypeScript<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/using-modern-decorators-in-typescript-8nd\/#%D8%AF%DA%A9%D9%88%D8%B1%D8%A7%D8%AA%D9%88%D8%B1%D9%87%D8%A7_%D8%AF%D8%B1_TypeScript_50\" >\u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u062f\u0631 TypeScript 5.0<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/using-modern-decorators-in-typescript-8nd\/#%D8%AF%D9%85%D9%88_%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87_%D8%AF%DA%A9%D9%88%D8%B1%D8%A7%D8%AA%D9%88%D8%B1\" >\u062f\u0645\u0648 \u06a9\u0627\u0631\u062e\u0627\u0646\u0647 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/using-modern-decorators-in-typescript-8nd\/#%D8%A8%D8%A7%D8%B2%D8%B3%D8%A7%D8%B2%DB%8C_%D8%AF%DA%A9%D9%88%D8%B1%D8%A7%D8%AA%D9%88%D8%B1%D9%87%D8%A7%DB%8C_%D9%85%D9%88%D8%AC%D9%88%D8%AF\" >\u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/using-modern-decorators-in-typescript-8nd\/#%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C_%D8%A8%D8%A7_%D9%85%D8%AD%D8%AF%D9%88%D8%AF%DB%8C%D8%AA%E2%80%8C%D9%87%D8%A7%DB%8C_%D8%AF%DA%A9%D9%88%D8%B1%D8%A7%D8%AA%D9%88%D8%B1%D9%87%D8%A7%DB%8C_%D9%85%D8%AF%D8%B1%D9%86\" >\u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u062f\u0631\u0646<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/using-modern-decorators-in-typescript-8nd\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87\" >\u0646\u062a\u06cc\u062c\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/using-modern-decorators-in-typescript-8nd\/#LogRocket_%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA_%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87_%DA%A9%D8%A7%D9%85%D9%84_%D8%AF%D8%B1_%D9%88%D8%A8_%D9%88_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%D8%AA%D9%84%D9%81%D9%86_%D9%87%D9%85%D8%B1%D8%A7%D9%87_%D8%B4%D9%85%D8%A7\" >LogRocket: \u0642\u0627\u0628\u0644\u06cc\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0627\u0645\u0644 \u062f\u0631 \u0648\u0628 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062a\u0644\u0641\u0646 \u0647\u0645\u0631\u0627\u0647 \u0634\u0645\u0627<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE%DA%86%D9%87_%D8%AF%DA%A9%D9%88%D8%B1%D8%A7%D8%AA%D9%88%D8%B1%D9%87%D8%A7%DB%8C_TypeScript\"><\/span>\n<p>  \u062a\u0627\u0631\u06cc\u062e\u0686\u0647 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc TypeScript <\/p>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Decorators \u0642\u0627\u0628\u0644\u06cc\u062a\u06cc \u0627\u0633\u062a \u06a9\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0631\u0627 \u0642\u0627\u062f\u0631 \u0645\u06cc \u0633\u0627\u0632\u062f \u062a\u0627 \u0628\u0627 \u0627\u0641\u0632\u0648\u062f\u0646 \u0633\u0631\u06cc\u0639 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0647 \u06a9\u0644\u0627\u0633 \u0647\u0627\u060c \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u06a9\u0644\u0627\u0633 \u0648 \u0645\u062a\u062f\u0647\u0627\u06cc \u06a9\u0644\u0627\u0633\u060c \u0635\u0641\u062d\u0647 \u062f\u06cc\u06af \u0631\u0627 \u06a9\u0627\u0647\u0634 \u062f\u0647\u0646\u062f.  \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 TypeScript \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646 \u0628\u0627\u0631 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u0631\u0627 \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f\u060c \u0627\u0632 \u0645\u0634\u062e\u0635\u0627\u062a ECMAScript \u067e\u06cc\u0631\u0648\u06cc \u0646\u0645\u06cc \u06a9\u0631\u062f.  \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0639\u0627\u0644\u06cc \u0646\u0628\u0648\u062f\u060c \u0632\u06cc\u0631\u0627 \u06a9\u062f\u0647\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0634\u062f\u0647 \u0628\u0647 \u0637\u0648\u0631 \u0627\u06cc\u062f\u0647 \u0622\u0644 \u0627\u0632 \u0647\u0631 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0628\u0627\u06cc\u062f \u0628\u0627 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627\u06cc \u0648\u0628 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f! <\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u062a\u0646\u0638\u06cc\u0645 \u06cc\u06a9 <code>--experimentalDecorators<\/code> \u067e\u0631\u0686\u0645 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 \u062a\u062c\u0631\u0628\u06cc  \u0686\u0646\u062f\u06cc\u0646 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0645\u062d\u0628\u0648\u0628 TypeScript\u060c \u0645\u0627\u0646\u0646\u062f type-graphql \u0648 inversify\u060c \u0628\u0631 \u0627\u06cc\u0646 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u062a\u06a9\u06cc \u0647\u0633\u062a\u0646\u062f. <\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u062b\u0627\u0644\u06cc \u0627\u0632 \u06cc\u06a9 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u0628\u0627 \u0631\u0648\u0634 \u06a9\u0644\u0627\u0633\u06cc \u0633\u0627\u062f\u0647 \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0631\u06af\u0648\u0646\u0648\u0645\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u0646\u062d\u0648 \u062c\u062f\u06cc\u062f \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>function debugMethod(_target: unknown, memberName: string, propertyDescriptor: PropertyDescriptor) {\n  return {\n    get() {\n      const wrapperFunction = (...arguments_: unknown[]) =&gt; {\n        const now = new Date(Date.now());\n        console.log('start time', now.toISOString());\n        propertyDescriptor.value.apply(this, arguments_);\n        const end = new Date(Date.now());\n        console.log('end time', end.toISOString());\n      };\n      Object.defineProperty(this, memberName, {\n        value: wrapperFunction,\n        configurable: true,\n        writable: true,\n      });\n      return wrapperFunction;\n    },\n  };\n}\nclass ComplexClass {\n  @debugMethod\n  public complexMethod(a: number): void {\n    console.log(\"DOING COMPLEX STUFF!\");\n  }\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u06a9\u062f \u0628\u0627\u0644\u0627 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 <code>debugMethod<\/code> decorator \u0648\u06cc\u0698\u06af\u06cc \u0645\u062a\u062f \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0644\u063a\u0648 \u0645\u06cc \u06a9\u0646\u062f <code>Object.defineProperty<\/code>\u060c \u0627\u0645\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc\u060c \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u06a9\u062f \u0622\u0633\u0627\u0646 \u0646\u06cc\u0633\u062a.  \u0647\u0645\u0686\u0646\u06cc\u0646\u060c \u0622\u0631\u06af\u0648\u0645\u0627\u0646\u200c\u0647\u0627 \u0627\u0632 \u0646\u0638\u0631 \u0646\u0648\u0639 \u0627\u06cc\u0645\u0646 \u0646\u06cc\u0633\u062a\u0646\u062f\u060c \u06a9\u0647 \u0627\u06cc\u0645\u0646\u06cc \u0645\u0627 \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0645\u062d\u062f\u0648\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f <code>wrapperFunction<\/code>.  \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0627\u0645\u0639\u062a\u0628\u0631\u060c \u0645\u0627\u0646\u0646\u062f \u0648\u06cc\u0698\u06af\u06cc \u06a9\u0644\u0627\u0633\u060c \u062e\u0631\u0627\u0628 \u0646\u062e\u0648\u0627\u0647\u062f \u0634\u062f. <\/p>\n<p>\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0698\u0646\u0631\u06cc\u06a9\u200c\u0647\u0627\u06cc TypeScript \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0628\u0647 \u0627\u06cc\u0645\u0646\u06cc \u0646\u0648\u0639 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0627\u0645\u0627 TypeScript \u0627\u0646\u0648\u0627\u0639 \u0639\u0645\u0648\u0645\u06cc \u0631\u0627 \u0627\u0633\u062a\u0646\u0628\u0627\u0637 \u0646\u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0627\u06cc\u0646 \u0628\u0627\u0639\u062b \u0645\u06cc\u200c\u0634\u0648\u062f \u0645\u0635\u0631\u0641 \u0622\u0646\u200c\u0647\u0627 \u062f\u0631\u062f\u0633\u0631\u0633\u0627\u0632 \u0628\u0627\u0634\u062f.  \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646\u060c \u0646\u0648\u0634\u062a\u0646 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0628\u0647 \u062f\u0644\u06cc\u0644 \u0645\u0642\u0627\u062f\u06cc\u0631 \u0646\u0627\u0634\u0646\u0627\u062e\u062a\u0647 \u0627\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u062f\u0631 \u0622\u0646\u0647\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u0646\u062f\u060c \u062f\u0634\u0648\u0627\u0631 \u0627\u0633\u062a. <\/p>\n<p>\u0646\u0633\u062e\u0647 \u0645\u062f\u0631\u0646 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u06a9\u0647 \u0628\u0647 \u0637\u0648\u0631 \u0631\u0633\u0645\u06cc \u062f\u0631 TypeScript 5.0 \u0639\u0631\u0636\u0647 \u062e\u0648\u0627\u0647\u062f \u0634\u062f\u060c \u062f\u06cc\u06af\u0631 \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u067e\u0631\u0686\u0645 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 \u0646\u062f\u0627\u0631\u062f \u0648 \u0627\u0632 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0631\u0633\u0645\u06cc ECMAScript Stage-3 \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc \u06a9\u0646\u062f.  \u062f\u0631 \u06a9\u0646\u0627\u0631 \u06cc\u06a9 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u067e\u0627\u06cc\u062f\u0627\u0631 \u06a9\u0647 \u0627\u0632 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0647\u0627\u06cc ECMAScript \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc \u06a9\u0646\u062f\u060c \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u0627\u06a9\u0646\u0648\u0646 \u0628\u0647 \u0637\u0648\u0631 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0628\u0627 \u0633\u06cc\u0633\u062a\u0645 \u0646\u0648\u0639 TypeScript \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u062a\u0631\u06cc \u0631\u0627 \u0646\u0633\u0628\u062a \u0628\u0647 \u0646\u0633\u062e\u0647 \u0627\u0635\u0644\u06cc \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f. <\/p>\n<p>\u0628\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u062c\u062f\u06cc\u062f \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u062f\u0631 TypeScript 5.0\u060c \u0627\u06cc\u0646 \u062c\u0646\u0628\u0647 \u0647\u0627 \u062a\u0627 \u062d\u062f \u0632\u06cc\u0627\u062f\u06cc \u0628\u0647\u0628\u0648\u062f \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a.  \u0628\u06cc\u0627 \u06cc\u06a9 \u0646\u06af\u0627\u0647\u06cc \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AF%DA%A9%D9%88%D8%B1%D8%A7%D8%AA%D9%88%D8%B1%D9%87%D8%A7_%D8%AF%D8%B1_TypeScript_50\"><\/span>\n<p>  \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u062f\u0631 TypeScript 5.0 <\/p>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>TypeScript 5.0 \u0627\u0631\u06af\u0648\u0646\u0648\u0645\u06cc \u0628\u0647\u062a\u0631\u060c \u0627\u06cc\u0645\u0646\u06cc \u0646\u0648\u0639 \u0628\u0647\u0628\u0648\u062f \u06cc\u0627\u0641\u062a\u0647 \u0648 \u0645\u0648\u0627\u0631\u062f \u062f\u06cc\u06af\u0631 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0645\u0634\u0627\u0628\u0647 \u0627\u0632 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 TypeScript 5.0 \u0627\u0633\u062a \u06a9\u0647 \u06cc\u06a9 \u0645\u062a\u062f \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0644\u063a\u0648 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"kd\">function<\/span> <span class=\"nx\">debugMethod<\/span><span class=\"p\">(<\/span><span class=\"nx\">originalMethod<\/span><span class=\"p\">:<\/span> <span class=\"kr\">any<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_context<\/span><span class=\"p\">:<\/span> <span class=\"kr\">any<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">function<\/span> <span class=\"nx\">replacementMethod<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">:<\/span> <span class=\"kr\">any<\/span><span class=\"p\">,<\/span> <span class=\"p\">...<\/span><span class=\"nx\">args<\/span><span class=\"p\">:<\/span> <span class=\"kr\">any<\/span><span class=\"p\">[])<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">now<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">(<\/span><span class=\"nb\">Date<\/span><span class=\"p\">.<\/span><span class=\"nx\">now<\/span><span class=\"p\">());<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">start time<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">now<\/span><span class=\"p\">.<\/span><span class=\"nx\">toISOString<\/span><span class=\"p\">());<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">originalMethod<\/span><span class=\"p\">.<\/span><span class=\"nx\">call<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"p\">...<\/span><span class=\"nx\">args<\/span><span class=\"p\">);<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">end<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">(<\/span><span class=\"nb\">Date<\/span><span class=\"p\">.<\/span><span class=\"nx\">now<\/span><span class=\"p\">());<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">end time<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">end<\/span><span class=\"p\">.<\/span><span class=\"nx\">toISOString<\/span><span class=\"p\">());<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nx\">result<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n  <span class=\"k\">return<\/span> <span class=\"nx\">replacementMethod<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nx\">ComplexClass<\/span> <span class=\"p\">{<\/span>\n  <span class=\"p\">@<\/span><span class=\"nd\">debugMethod<\/span>\n  <span class=\"nx\">complexMethod<\/span><span class=\"p\">(<\/span><span class=\"nx\">a<\/span><span class=\"p\">:<\/span> <span class=\"kr\">number<\/span><span class=\"p\">):<\/span> <span class=\"k\">void<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">DOING STUFF!<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><em><strong>NB\u060c<\/strong> \u0628\u0631\u0627\u06cc \u0627\u0645\u062a\u062d\u0627\u0646 TypeScript \u062f\u0631 \u06cc\u06a9 \u0632\u0645\u06cc\u0646 \u0628\u0627\u0632\u06cc \u0622\u0646\u0644\u0627\u06cc\u0646\u060c \u0641\u0642\u0637 \u0646\u0633\u062e\u0647 \u0631\u0627 \u0628\u0647 &#8220;nightly&#8221; \u06cc\u0627 &#8220;5.0&#8221; \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f.<\/em> \u0628\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u062c\u062f\u06cc\u062f\u060c \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u062a\u0627\u0628\u0639 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0622\u0646 \u0634\u0648\u062f.  \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 <code>Object.defineProperty<\/code>.  \u0627\u06cc\u0646 \u0627\u0645\u0631 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0648 \u062f\u0631\u06a9 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.  \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0627\u06cc\u0646 \u0628\u0647\u0628\u0648\u062f\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0622\u0646 \u0631\u0627 \u06a9\u0627\u0645\u0644\u0627\u064b \u0627\u06cc\u0645\u0646 \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"kd\">function<\/span> <span class=\"nx\">debugMethod<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span> <span class=\"nx\">TArgs<\/span> <span class=\"kd\">extends<\/span> <span class=\"p\">[<\/span><span class=\"kr\">string<\/span><span class=\"p\">,<\/span> <span class=\"kr\">number<\/span><span class=\"p\">],<\/span> <span class=\"nx\">TReturn<\/span> <span class=\"kd\">extends<\/span> <span class=\"kr\">number<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span>\n  <span class=\"nx\">originalMethod<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Function<\/span><span class=\"p\">,<\/span>\n  <span class=\"nx\">context<\/span><span class=\"p\">:<\/span> <span class=\"nx\">ClassMethodDecoratorContext<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span> <span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span> <span class=\"p\">...<\/span><span class=\"nx\">args<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TArgs<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">TReturn<\/span><span class=\"o\">&gt;<\/span>\n<span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">function<\/span> <span class=\"nx\">replacementMethod<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span> <span class=\"nx\">a<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TArgs<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">],<\/span> <span class=\"nx\">b<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TArgs<\/span><span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">]):<\/span> <span class=\"nx\">TReturn<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">now<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">(<\/span><span class=\"nb\">Date<\/span><span class=\"p\">.<\/span><span class=\"nx\">now<\/span><span class=\"p\">());<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">start time<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">now<\/span><span class=\"p\">.<\/span><span class=\"nx\">toISOString<\/span><span class=\"p\">());<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">originalMethod<\/span><span class=\"p\">.<\/span><span class=\"nx\">call<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">,<\/span> <span class=\"nx\">a<\/span><span class=\"p\">,<\/span> <span class=\"nx\">b<\/span><span class=\"p\">);<\/span>\n    <span class=\"kd\">const<\/span> <span class=\"nx\">end<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nb\">Date<\/span><span class=\"p\">(<\/span><span class=\"nb\">Date<\/span><span class=\"p\">.<\/span><span class=\"nx\">now<\/span><span class=\"p\">());<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">end time<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">end<\/span><span class=\"p\">.<\/span><span class=\"nx\">toISOString<\/span><span class=\"p\">());<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nx\">result<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n  <span class=\"k\">return<\/span> <span class=\"nx\">replacementMethod<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0639\u0645\u0644\u06a9\u0631\u062f \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u062f\u0631 TypeScript 5.0 \u0628\u0633\u06cc\u0627\u0631 \u0628\u0647\u0628\u0648\u062f \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a \u0648 \u0627\u06a9\u0646\u0648\u0646 \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0631\u0627 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<ul>\n<li>    \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0698\u0646\u0631\u06cc\u06a9 \u0628\u0631\u0627\u06cc \u062a\u0627\u06cc\u067e \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0647\u0627\u06cc \u06cc\u06a9 \u0631\u0648\u0634 \u0648 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u06cc\u06a9 \u0645\u0642\u062f\u0627\u0631.  \u0645\u062a\u062f \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0631\u0634\u062a\u0647 \u0648 \u06cc\u06a9 \u0639\u062f\u062f \u0631\u0627 \u0628\u067e\u0630\u06cc\u0631\u062f\u060c <code>TArgs<\/code>\u0648 \u06cc\u06a9 \u0639\u062f\u062f \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f\u060c <code>TReturn<\/code>\n<\/li>\n<li>    \u062a\u0627\u06cc\u067e \u06a9\u0631\u062f\u0646 <code>originalMethod<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 <code>Function<\/code>\n<\/li>\n<li>    \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>ClassMethodDecoratorContext<\/code> \u0646\u0648\u0639 \u06a9\u0645\u06a9\u06cc \u062f\u0627\u062e\u0644\u06cc\u061b  \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0647\u0645\u0647 \u0627\u0646\u0648\u0627\u0639 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f<\/li>\n<\/ul>\n<p>\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 \u0628\u0631\u0631\u0633\u06cc \u062e\u0637\u0627\u0647\u0627 \u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0627\u062f\u0631\u0633\u062a\u060c \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0628\u0628\u06cc\u0646\u06cc\u0645 \u0622\u06cc\u0627 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u0645\u0627 \u0648\u0627\u0642\u0639\u0627\u064b \u0627\u0632 \u0646\u0638\u0631 \u0646\u0648\u0639 \u0627\u06cc\u0645\u0646 \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631:  \u0627\u06a9\u0646\u0648\u0646\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u06cc\u06a9 \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0648\u0627\u0642\u0639\u06cc \u0628\u0631\u0627\u06cc \u062a\u0632\u0626\u06cc\u0646\u0627\u062a \u062c\u062f\u06cc\u062f TypeScript 5.0 \u0646\u06af\u0627\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AF%D9%85%D9%88_%DA%A9%D8%A7%D8%B1%D8%AE%D8%A7%D9%86%D9%87_%D8%AF%DA%A9%D9%88%D8%B1%D8%A7%D8%AA%D9%88%D8%B1\"><\/span>\n<p>  \u062f\u0645\u0648 \u06a9\u0627\u0631\u062e\u0627\u0646\u0647 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0627\u06cc\u0645\u0646\u06cc \u0646\u0648\u0639 \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc TypeScript 5.0 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0639\u0645\u0644\u06a9\u0631\u062f\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u0631\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u0646\u062f\u060c \u06a9\u0647 \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06a9\u0627\u0631\u062e\u0627\u0646\u0647 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f.  \u06a9\u0627\u0631\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u0628\u0647 \u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u0646\u062f \u06a9\u0647 \u0628\u0627 \u0639\u0628\u0648\u0631 \u062f\u0627\u062f\u0646 \u0628\u0631\u062e\u06cc \u0627\u0632 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627 \u062f\u0631 \u06a9\u0627\u0631\u062e\u0627\u0646\u0647\u060c \u0631\u0641\u062a\u0627\u0631 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u0645. <\/p>\n<p>\u0628\u0631\u0627\u06cc \u0646\u0633\u062e\u0647 \u06cc \u0646\u0645\u0627\u06cc\u0634\u06cc \u062e\u0648\u062f\u060c \u06cc\u06a9 \u06a9\u0627\u0631\u062e\u0627\u0646\u0647 \u062a\u0632\u0626\u06cc\u0646\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0645\u062a\u062f \u06a9\u0644\u0627\u0633 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0647\u0627\u06cc \u062e\u0648\u062f \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc \u062f\u0647\u062f.  \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627 \u0639\u0645\u0644\u06af\u0631 \u0633\u0647 \u062a\u0627\u06cc\u06cc \u0646\u0648\u0639 TypeScript \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0627\u0633\u062a.  \u0645\u062b\u0627\u0644 \u0645\u0627 \u0627\u0632 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627\u06cc REST API \u0645\u0627\u0646\u0646\u062f NestJS \u0627\u0644\u0647\u0627\u0645 \u06af\u0631\u0641\u062a\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a. <\/p>\n<p>\u0645\u0627 \u0628\u0627 \u0645\u0627\u0698\u0648\u0644 \u062e\u0648\u062f \u062a\u0645\u0627\u0633 \u0645\u06cc \u06af\u06cc\u0631\u06cc\u0645 <code>rest-framework<\/code>.  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 TypeScript \u062e\u0627\u0644\u06cc \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645 <code>ts-node<\/code>:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">$ <\/span><span class=\"nb\">mkdir <\/span>rest-framework\n<span class=\"nv\">$ <\/span><span class=\"nb\">cd <\/span>rest-framework\n<span class=\"nv\">$ <\/span>npm init <span class=\"nt\">-y<\/span>\n<span class=\"nv\">$ <\/span>npm <span class=\"nb\">install<\/span> <span class=\"nt\">-D<\/span> typescript@5.0.4 @types\/node ts-node\n<span class=\"nv\">$ <\/span><span class=\"nb\">touch <\/span>index.ts\n<span class=\"nv\">$ <\/span><span class=\"nb\">echo<\/span> <span class=\"s2\">\"console.log('Hello, world!');\"<\/span> <span class=\"o\">&gt;<\/span> index.ts\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0648 \u0627\u062c\u0631\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u06cc\u0645 <code>package.json<\/code>:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight json\"><code><span class=\"p\">{<\/span><span class=\"w\">\n  <\/span><span class=\"err\">\/\/<\/span><span class=\"w\"> <\/span><span class=\"err\">...<\/span><span class=\"w\">\n  <\/span><span class=\"nl\">\"scripts\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"p\">{<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"build\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"tsc\"<\/span><span class=\"p\">,<\/span><span class=\"w\">\n    <\/span><span class=\"nl\">\"start\"<\/span><span class=\"p\">:<\/span><span class=\"w\"> <\/span><span class=\"s2\">\"ts-node index.ts\"<\/span><span class=\"w\">\n  <\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><span class=\"p\">}<\/span><span class=\"w\">\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u06cc\u0645 \u0628\u062f\u0648\u06cc\u0645 <code>npm start<\/code> \u0628\u0631\u0627\u06cc \u062f\u06cc\u062f\u0646 \u0622\u0646 \u062f\u0631 \u0639\u0645\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">$ <\/span>npm start\nHello, world!\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062d\u0627\u0644\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u0646\u0648\u0627\u0639 \u062e\u0648\u062f \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"kr\">interface<\/span> <span class=\"nx\">RouteOptionsAuthEnabled<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nl\">auth<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<span class=\"kr\">interface<\/span> <span class=\"nx\">RouteOptionsAuthDisabled<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nl\">auth<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<span class=\"kd\">type<\/span> <span class=\"nx\">RouteArguments<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"kr\">string<\/span><span class=\"p\">]<\/span> <span class=\"o\">|<\/span> <span class=\"p\">[];<\/span>\n<span class=\"kd\">type<\/span> <span class=\"nx\">RouteDecorator<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span> <span class=\"nx\">TArgs<\/span> <span class=\"kd\">extends<\/span> <span class=\"nx\">RouteArguments<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span>\n  <span class=\"nx\">originalMethod<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Function<\/span><span class=\"p\">,<\/span>\n  <span class=\"nx\">context<\/span><span class=\"p\">:<\/span> <span class=\"nx\">ClassMethodDecoratorContext<\/span><span class=\"o\">&lt;<\/span>\n    <span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span> <span class=\"p\">...<\/span><span class=\"nx\">args<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TArgs<\/span><span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"kr\">string<\/span>\n  <span class=\"o\">&gt;<\/span>\n<span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"k\">void<\/span><span class=\"p\">;<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u06a9\u0627\u0631\u062e\u0627\u0646\u0647 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"kd\">function<\/span> <span class=\"nx\">Route<\/span><span class=\"o\">&lt;<\/span>\n  <span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span>\n  <span class=\"c1\">\/\/ The user can enable or disable auth<\/span>\n  <span class=\"nx\">TOptions<\/span> <span class=\"kd\">extends<\/span> <span class=\"nx\">RouteOptionsAuthEnabled<\/span> <span class=\"o\">|<\/span> <span class=\"nx\">RouteOptionsAuthDisabled<\/span>\n<span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span>\n  <span class=\"nx\">options<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TOptions<\/span>\n<span class=\"p\">):<\/span> <span class=\"nx\">RouteDecorator<\/span><span class=\"o\">&lt;<\/span>\n  <span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span>\n  <span class=\"c1\">\/\/ Do not accept a function that uses a string for an argument if auth is disabled<\/span>\n  <span class=\"nx\">TOptions<\/span> <span class=\"kd\">extends<\/span> <span class=\"nx\">RouteOptionsAuthEnabled<\/span> <span class=\"p\">?<\/span> <span class=\"p\">[<\/span><span class=\"kr\">string<\/span><span class=\"p\">]<\/span> <span class=\"p\">:<\/span> <span class=\"p\">[]<\/span>\n<span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">return<\/span> <span class=\"o\">&lt;<\/span><span class=\"nx\">TThis<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span>\n    <span class=\"na\">target<\/span><span class=\"p\">:<\/span> <span class=\"p\">(<\/span>\n      <span class=\"na\">this<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span>\n      <span class=\"p\">...<\/span><span class=\"na\">args<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TOptions<\/span> <span class=\"kd\">extends<\/span> <span class=\"nx\">RouteOptionsAuthEnabled<\/span> <span class=\"p\">?<\/span> <span class=\"p\">[<\/span><span class=\"kr\">string<\/span><span class=\"p\">]<\/span> <span class=\"p\">:<\/span> <span class=\"p\">[]<\/span>\n    <span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"kr\">string<\/span><span class=\"p\">,<\/span>\n    <span class=\"na\">context<\/span><span class=\"p\">:<\/span> <span class=\"nx\">ClassMethodDecoratorContext<\/span><span class=\"o\">&lt;<\/span>\n      <span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span>\n      <span class=\"p\">(<\/span>\n        <span class=\"na\">this<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">...<\/span><span class=\"na\">args<\/span><span class=\"p\">:<\/span> <span class=\"nx\">TOptions<\/span> <span class=\"kd\">extends<\/span> <span class=\"nx\">RouteOptionsAuthEnabled<\/span> <span class=\"p\">?<\/span> <span class=\"p\">[<\/span><span class=\"kr\">string<\/span><span class=\"p\">]<\/span> <span class=\"p\">:<\/span> <span class=\"p\">[]<\/span>\n      <span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"kr\">string<\/span>\n    <span class=\"o\">&gt;<\/span>\n  <span class=\"p\">)<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"p\">{};<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06cc\u06a9 \u0637\u0631\u0627\u062d \u0645\u0633\u06cc\u0631 \u062f\u0627\u0631\u06cc\u0645 \u06a9\u0647 \u0628\u0633\u062a\u0647 \u0628\u0647 \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u060c \u0627\u0646\u0648\u0627\u0639 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0645\u062a\u062f \u06a9\u0644\u0627\u0633 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc \u062f\u0647\u062f. <\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <code>Route<\/code> \u06a9\u0644\u0627\u0633 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u0648\u0631\u062f \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0645\u0627 \u0639\u0645\u0644 \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"kd\">class<\/span> <span class=\"nx\">Controller<\/span> <span class=\"p\">{<\/span>\n  <span class=\"p\">@<\/span><span class=\"nd\">Route<\/span><span class=\"p\">({<\/span> <span class=\"na\">auth<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span> <span class=\"p\">})<\/span>\n  <span class=\"kd\">get<\/span><span class=\"p\">(<\/span><span class=\"nx\">authHeaderValue<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">):<\/span> <span class=\"kr\">string<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">get http method handled!<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">response<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n  <span class=\"p\">@<\/span><span class=\"nd\">Route<\/span><span class=\"p\">({<\/span> <span class=\"na\">auth<\/span><span class=\"p\">:<\/span> <span class=\"kc\">false<\/span> <span class=\"p\">})<\/span>\n  <span class=\"nx\">post<\/span><span class=\"p\">():<\/span> <span class=\"kr\">string<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nx\">log<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">post http method handled!<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">response<\/span><span class=\"dl\">\"<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06af\u0631 \u0628\u062e\u0648\u0627\u0647\u06cc\u0645 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u060c \u0645\u06cc \u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 TypeScript \u062f\u0631 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0634\u06a9\u0633\u062a \u062e\u0648\u0631\u062f\u0647 \u0627\u0633\u062a <code>authHeaderValue<\/code> \u062f\u0631 <code>post<\/code> \u0645\u0633\u06cc\u0631: <img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/05\/\u0627\u0633\u062a\u0641\u0627\u062f\u0647-\u0627\u0632-\u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc-\u0645\u062f\u0631\u0646-\u062f\u0631-TypeScript.png\" alt=\"AuthHeaderValue \u0627\u0631\u0633\u0627\u0644 \u0645\u0633\u06cc\u0631 \u062a\u0627\u06cc\u067e \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0634\u06a9\u0633\u062a\" loading=\"lazy\" width=\"720\" height=\"317\" title=\"\"> \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0627\u0631\u062e\u0627\u0646\u0647 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0642\u062f\u0631\u062a \u06a9\u0627\u0631\u06cc \u06a9\u0647 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0627\u06cc\u0645\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u0646\u062f \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%A7%D8%B2%D8%B3%D8%A7%D8%B2%DB%8C_%D8%AF%DA%A9%D9%88%D8%B1%D8%A7%D8%AA%D9%88%D8%B1%D9%87%D8%A7%DB%8C_%D9%85%D9%88%D8%AC%D9%88%D8%AF\"><\/span>\n<p>  \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06af\u0631 \u0627\u0632 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 TypeScript \u0645\u0648\u062c\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u062f\u060c \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0632 API \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627\u06cc \u0641\u0631\u0627\u0648\u0627\u0646 \u0622\u0646 \u0628\u0647\u0631\u0647 \u0628\u0628\u0631\u06cc\u062f.  \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0627\u0635\u0644\u06cc \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u0647 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u06a9\u0631\u062f\u060c \u0627\u0645\u0627 \u062a\u0641\u0627\u0648\u062a \u0622\u0646\u0642\u062f\u0631 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u062a\u0644\u0627\u0634 \u062f\u0627\u0631\u062f. <\/p>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0647\u062a\u0631\u06cc\u0646 \u0646\u062a\u06cc\u062c\u0647\u060c \u0645\u0631\u0627\u062d\u0644 \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f:<\/p>\n<ul>\n<li>    \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u062e\u0648\u062f \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f<\/li>\n<li>    \u062d\u0630\u0641 \u06cc\u0627 \u062c\u0639\u0644 <code>experimentalDecorators<\/code> \u067e\u0631\u0686\u0645 \u0647\u0627\u06cc \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 TypeScript<\/li>\n<li>    \u0627\u06cc\u0646 \u062e\u0644\u0627\u0635\u0647 \u06af\u0633\u062a\u0631\u062f\u0647 \u0627\u0632 \u0646\u062d\u0648\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u062c\u062f\u06cc\u062f \u0631\u0627 \u0628\u062e\u0648\u0627\u0646\u06cc\u062f\n<\/li>\n<li>    \u0645\u062d\u062f\u0648\u062f\u06cc\u062a \u0647\u0627\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u062f\u0631\u0646 \u0631\u0627 \u062f\u0631\u06a9 \u06a9\u0646\u06cc\u062f (\u062f\u0631 \u0627\u062f\u0627\u0645\u0647 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u062e\u0648\u0627\u0647\u06cc\u0645 \u067e\u0631\u062f\u0627\u062e\u062a)<\/li>\n<li>    \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u0631\u0627 \u0628\u062f\u0648\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0646\u0648\u0639 \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u06a9\u0646\u06cc\u062f <code>any<\/code> \u0628\u0647 \u062c\u0627\u06cc \u0647\u0645\u0647 \u0627\u0646\u0648\u0627\u0639<\/li>\n<li>    \u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06cc\u062f \u06a9\u0647 \u0622\u0632\u0645\u0648\u0646 \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0642\u0628\u0648\u0644 \u0645\u06cc \u0634\u0648\u0646\u062f<\/li>\n<li>    \u0627\u0646\u0648\u0627\u0639 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C_%D8%A8%D8%A7_%D9%85%D8%AD%D8%AF%D9%88%D8%AF%DB%8C%D8%AA%E2%80%8C%D9%87%D8%A7%DB%8C_%D8%AF%DA%A9%D9%88%D8%B1%D8%A7%D8%AA%D9%88%D8%B1%D9%87%D8%A7%DB%8C_%D9%85%D8%AF%D8%B1%D9%86\"><\/span>\n<p>  \u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 \u0645\u062d\u062f\u0648\u062f\u06cc\u062a\u200c\u0647\u0627\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u062f\u0631\u0646 <\/p>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u062c\u0631\u0627\u06cc \u0645\u062f\u0631\u0646 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u062e\u0628\u0631 \u062e\u0648\u0628\u06cc \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 TypeScript \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.  \u0627\u0648\u0644\u060c \u0647\u06cc\u0686 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0631\u0648\u0634 \u062a\u0632\u0626\u06cc\u0646 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.  \u0627\u06cc\u0646 \u062f\u0631 \u0645\u0634\u062e\u0635\u0627\u062a \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0627\u0633\u062a\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u06cc\u0645 \u062f\u0631 \u0645\u0634\u062e\u0635\u0627\u062a \u0646\u0647\u0627\u06cc\u06cc \u06af\u0646\u062c\u0627\u0646\u062f\u0647 \u0634\u0648\u062f.  \u062d\u0630\u0641 \u0622\u0646 \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647 \u0627\u0633\u062a \u0632\u06cc\u0631\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0645\u062d\u0628\u0648\u0628 \u0645\u0627\u0646\u0646\u062f <code>type-graphql<\/code>\u060c \u0627\u0632 \u0627\u06cc\u0646 \u062f\u0631 \u0631\u0627\u0647 \u0647\u0627\u06cc \u0645\u0647\u0645\u06cc \u0645\u0627\u0646\u0646\u062f \u062d\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0647\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"p\">@<\/span><span class=\"nd\">Query<\/span><span class=\"p\">(<\/span><span class=\"nx\">returns<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nx\">Recipe<\/span><span class=\"p\">)<\/span>\n<span class=\"k\">async<\/span> <span class=\"nx\">recipe<\/span><span class=\"p\">(@<\/span><span class=\"nd\">Arg<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">recipeId<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"nx\">recipeId<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">return<\/span> <span class=\"k\">this<\/span><span class=\"p\">.<\/span><span class=\"nx\">recipeRepository<\/span><span class=\"p\">.<\/span><span class=\"nx\">findOneById<\/span><span class=\"p\">(<\/span><span class=\"nx\">recipeId<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0648\u0645\u060c TypeScript 5.0 \u0646\u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0645\u062a\u0627\u062f\u06cc\u062a\u0627\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u0631\u0627 \u0645\u0646\u062a\u0634\u0631 \u06a9\u0646\u062f.  \u067e\u0633 \u0627\u0632 \u0622\u0646\u060c \u0628\u0627 Reflect API \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0646\u0645\u06cc \u0634\u0648\u062f \u0648 \u0628\u0627 \u0628\u0633\u062a\u0647 npm reflect-metadata \u06a9\u0627\u0631 \u0646\u0645\u06cc \u06a9\u0646\u062f. <\/p>\n<p>\u0633\u0648\u0645\u060c <code>--emitDecoratorMetadata<\/code> flag \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0648 \u0627\u0635\u0644\u0627\u062d \u0627\u0628\u0631\u062f\u0627\u062f\u0647\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0639\u06cc\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u062f\u060c \u062f\u06cc\u06af\u0631 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc\u200c\u0634\u0648\u062f.  \u0645\u062a\u0623\u0633\u0641\u0627\u0646\u0647\u060c \u0647\u06cc\u0686 \u0631\u0627\u0647\u06cc \u0648\u0627\u0642\u0639\u06cc \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0628\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0634\u0627\u0628\u0647 \u0628\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f.  \u0645\u0648\u0627\u0631\u062f\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u06a9\u0631\u062f.  \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u06cc\u06a9 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0627\u0646\u0648\u0627\u0639 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0631\u0627 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"kd\">function<\/span> <span class=\"nx\">validateParameterType<\/span><span class=\"p\">(<\/span><span class=\"nx\">target<\/span><span class=\"p\">:<\/span> <span class=\"kr\">any<\/span><span class=\"p\">,<\/span> <span class=\"nx\">propertyKey<\/span><span class=\"p\">:<\/span> <span class=\"kr\">string<\/span> <span class=\"o\">|<\/span> <span class=\"nx\">symbol<\/span><span class=\"p\">):<\/span> <span class=\"k\">void<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"na\">methodParameterTypes<\/span><span class=\"p\">:<\/span> <span class=\"p\">(<\/span><span class=\"kr\">string<\/span> <span class=\"o\">|<\/span> <span class=\"nx\">unknown<\/span><span class=\"p\">)[]<\/span> <span class=\"o\">=<\/span>\n    <span class=\"nb\">Reflect<\/span><span class=\"p\">.<\/span><span class=\"nx\">getMetadata<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">design:paramtypes<\/span><span class=\"dl\">\"<\/span><span class=\"p\">,<\/span> <span class=\"nx\">target<\/span><span class=\"p\">,<\/span> <span class=\"nx\">propertyKey<\/span><span class=\"p\">)<\/span> <span class=\"o\">??<\/span> <span class=\"p\">[];<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">firstParameterType<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">methodParameterTypes<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">];<\/span>\n  <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"k\">typeof<\/span> <span class=\"nx\">firstParameterType<\/span> <span class=\"o\">!==<\/span> <span class=\"dl\">\"<\/span><span class=\"s2\">string<\/span><span class=\"dl\">\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">TypeError<\/span><span class=\"p\">(<\/span><span class=\"dl\">\"<\/span><span class=\"s2\">First parameter must be a string<\/span><span class=\"dl\">\"<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u0634\u0627\u0628\u0647\u06cc \u0631\u0627 \u0628\u0627 \u0627\u06cc\u0645\u0646\u06cc \u0646\u0648\u0639 \u0628\u0647\u0628\u0648\u062f \u06cc\u0627\u0641\u062a\u0647 \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 TypeScript 5.0 \u0628\u0647 \u062f\u0633\u062a \u0622\u0648\u0631\u06cc\u0645.  \u0645\u0627 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0647\u0627\u06cc \u0631\u0648\u0634\u06cc \u0631\u0627 \u06a9\u0647 \u062a\u0632\u0626\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0645\u0627\u0646\u0646\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"kd\">function<\/span> <span class=\"nx\">debugMethod<\/span><span class=\"o\">&lt;<\/span><span class=\"nx\">TThis<\/span><span class=\"p\">,<\/span> <span class=\"nx\">TArgs<\/span> <span class=\"kd\">extends<\/span> <span class=\"p\">[<\/span><span class=\"kr\">string<\/span><span class=\"p\">],<\/span> <span class=\"nx\">TReturn<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">(<\/span>\n<span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<span class=\"p\">...<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u062a\u0626\u0648\u0631\u06cc\u060c \u0645\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0628\u0631\u0627\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0647 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0646\u0648\u0627\u0639 \u0627\u0632 Reflect \u0648\u0627\u0628\u0633\u062a\u0647 \u0647\u0633\u062a\u0646\u062f\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645 <code>design:type<\/code>\u060c <code>design:paramtypes<\/code>\u060c \u0648 <code>design:returntype<\/code>.  \u0627\u06cc\u0646 \u06cc\u06a9 \u0631\u0648\u0634 \u0645\u062a\u0641\u0627\u0648\u062a \u0628\u0631\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627 \u0627\u0633\u062a.  \u0627\u06cc\u0646 \u06cc\u06a9 refactor \u0633\u0627\u062f\u0647 \u0646\u06cc\u0633\u062a\u060c \u0632\u06cc\u0631\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0646\u0648\u0639 \u0627\u0633\u062a\u0646\u062a\u0627\u062c TypeScript \u0628\u0631\u0627\u06cc \u0627\u062d\u06cc\u0627 \u06a9\u0631\u062f\u0646 \u0646\u062d\u0648\u0647 \u06a9\u0633\u0628 \u0648 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0627\u0646\u0648\u0627\u0639 \u062f\u0627\u0631\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u062c\u0631\u0627\u06cc \u062c\u062f\u06cc\u062f \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631 \u062f\u0631 TypeScript 5.0 \u0627\u0632 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f \u0631\u0633\u0645\u06cc ECMAScript Stage-3 \u067e\u06cc\u0631\u0648\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u06a9\u0646\u0648\u0646 \u0627\u0632 \u0646\u0638\u0631 \u0646\u0648\u0639 \u0627\u06cc\u0645\u0646 \u0627\u0633\u062a \u0648 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0648 \u062f\u0631\u06a9 \u0622\u0646 \u0631\u0627 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.  \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0628\u0631\u062e\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u0647 \u0645\u0627\u0646\u0646\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0631\u0648\u0634 \u062a\u0632\u0626\u06cc\u0646 \u0648 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u0627\u0646\u062a\u0634\u0627\u0631 \u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062a\u0632\u0626\u06cc\u0646\u06cc \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0631\u062f. <\/p>\n<p>\u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u067e\u0627\u06cc\u0647 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0628\u0647 \u0646\u0633\u062e\u0647 TypeScript 5.0 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u060c \u0627\u0645\u0627 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u0628\u0647 \u062a\u0644\u0627\u0634 \u0628\u06cc\u0634\u062a\u0631\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u062f.  \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0631\u0627 \u0627\u0635\u0644\u0627\u062d \u06a9\u0646\u0646\u062f \u062a\u0627 \u0627\u0632 API \u062c\u062f\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u0646\u062f \u0648 \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0631\u062a\u0628\u0637 \u0628\u0647\u0631\u0647 \u0628\u0628\u0631\u0646\u062f.  \u0622\u0646\u200c\u0647\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u0646\u062f \u06a9\u0645\u062a\u0631 \u0628\u0647 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u200c\u0647\u0627\u06cc \u062e\u0627\u0631\u062c\u06cc \u0648\u0627\u0628\u0633\u062a\u0647 \u0628\u0627\u0634\u0646\u062f \u0648 \u06a9\u0645\u062a\u0631 \u0627\u062d\u062a\u0645\u0627\u0644 \u062f\u0627\u0631\u062f \u06a9\u0647 \u06a9\u062f \u0631\u0627 \u062f\u0631 \u0622\u06cc\u0646\u062f\u0647 \u0627\u0635\u0644\u0627\u062d \u06a9\u0646\u0646\u062f.  \u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u0627\u062c\u0631\u0627\u06cc \u062f\u06a9\u0648\u0631\u0627\u062a\u0648\u0631\u0647\u0627\u06cc TypeScript \u06cc\u06a9 \u0645\u0632\u06cc\u062a \u0628\u0631\u0627\u06cc \u0627\u06a9\u0648\u0633\u06cc\u0633\u062a\u0645 \u06af\u0633\u062a\u0631\u062f\u0647 \u062a\u0631 \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u067e\u0630\u06cc\u0631\u0634 \u062c\u0627\u0645\u0639\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0645\u062f\u062a\u06cc \u0637\u0648\u0644 \u0628\u06a9\u0634\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"LogRocket_%D9%82%D8%A7%D8%A8%D9%84%DB%8C%D8%AA_%D9%85%D8%B4%D8%A7%D9%87%D8%AF%D9%87_%DA%A9%D8%A7%D9%85%D9%84_%D8%AF%D8%B1_%D9%88%D8%A8_%D9%88_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%87%D8%A7%DB%8C_%D8%AA%D9%84%D9%81%D9%86_%D9%87%D9%85%D8%B1%D8%A7%D9%87_%D8%B4%D9%85%D8%A7\"><\/span>\n<p>  LogRocket: \u0642\u0627\u0628\u0644\u06cc\u062a \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0627\u0645\u0644 \u062f\u0631 \u0648\u0628 \u0648 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062a\u0644\u0641\u0646 \u0647\u0645\u0631\u0627\u0647 \u0634\u0645\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/04\/1681354049_393_\u0631\u0627\u0647\u0646\u0645\u0627\u06cc-\u0645\u062f\u06cc\u0631\u06cc\u062a-\u0633\u06cc\u06af\u0646\u0627\u0644-\u062f\u0631-Rust.png\" alt=\"\u062b\u0628\u062a \u0646\u0627\u0645 LogRocket\" loading=\"lazy\" width=\"800\" height=\"451\" title=\"\"><\/p>\n<p>LogRocket \u06cc\u06a9 \u0631\u0627\u0647 \u062d\u0644 \u0645\u0627\u0646\u06cc\u062a\u0648\u0631\u06cc\u0646\u06af \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 frontend \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0645\u0634\u06a9\u0644\u0627\u062a \u0631\u0627 \u0628\u0647 \u06af\u0648\u0646\u0647 \u0627\u06cc \u062a\u06a9\u0631\u0627\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u06af\u0648\u06cc\u06cc \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0627\u062a\u0641\u0627\u0642 \u0627\u0641\u062a\u0627\u062f\u0647 \u0627\u0646\u062f.  LogRocket \u0628\u0647 \u062c\u0627\u06cc \u062d\u062f\u0633 \u0632\u062f\u0646 \u0686\u0631\u0627\u06cc\u06cc \u062e\u0637\u0627\u0647\u0627\u060c \u06cc\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0631\u0627\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0634\u0627\u062a \u0647\u0627 \u0648 \u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u060c \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062c\u0644\u0633\u0647 \u0631\u0627 \u062f\u0648\u0628\u0627\u0631\u0647 \u067e\u062e\u0634 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u0647 \u0633\u0631\u0639\u062a \u0645\u062a\u0648\u062c\u0647 \u0634\u0648\u06cc\u062f \u06a9\u0647 \u0686\u0647 \u0627\u0634\u062a\u0628\u0627\u0647\u06cc \u0631\u062e \u062f\u0627\u062f\u0647 \u0627\u0633\u062a.  \u0628\u062f\u0648\u0646 \u062f\u0631 \u0646\u0638\u0631 \u06af\u0631\u0641\u062a\u0646 \u0686\u0627\u0631\u0686\u0648\u0628\u060c \u0628\u0627 \u0647\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u06cc \u06a9\u0627\u0645\u0644\u0627\u064b \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u062f\u0627\u0631\u0627\u06cc \u067e\u0644\u0627\u06af\u06cc\u0646 \u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u062b\u0628\u062a \u0632\u0645\u06cc\u0646\u0647 \u0627\u0636\u0627\u0641\u06cc \u0627\u0632 Redux\u060c Vuex\u060c \u0648 @ngrx\/store \u0627\u0633\u062a.<\/p>\n<p>LogRocket \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u062b\u0628\u062a \u0627\u0642\u062f\u0627\u0645\u0627\u062a \u0648 \u0648\u0636\u0639\u06cc\u062a Redux\u060c \u06af\u0632\u0627\u0631\u0634\u200c\u0647\u0627\u06cc \u06a9\u0646\u0633\u0648\u0644\u060c \u062e\u0637\u0627\u0647\u0627\u06cc \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u060c stacktraces\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u200c\u0647\u0627\/\u067e\u0627\u0633\u062e\u200c\u0647\u0627\u06cc \u0634\u0628\u06a9\u0647 \u0628\u0627 \u0647\u062f\u0631 + \u0628\u062f\u0646\u0647\u060c \u0627\u0628\u0631\u062f\u0627\u062f\u0647 \u0645\u0631\u0648\u0631\u06af\u0631 \u0648 \u06af\u0632\u0627\u0631\u0634\u200c\u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0631\u0627 \u062b\u0628\u062a \u0645\u06cc\u200c\u06a9\u0646\u062f.  \u0647\u0645\u0686\u0646\u06cc\u0646 DOM \u0631\u0627 \u0628\u0631\u0627\u06cc \u0636\u0628\u0637 HTML \u0648 CSS \u062f\u0631 \u0635\u0641\u062d\u0647 \u0627\u0628\u0632\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0648\u06cc\u062f\u06cc\u0648\u0647\u0627\u06cc \u067e\u06cc\u06a9\u0633\u0644\u06cc \u06a9\u0627\u0645\u0644\u06cc \u0631\u0627 \u062d\u062a\u06cc \u0627\u0632 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u062a\u0631\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062a\u06a9 \u0635\u0641\u062d\u0647 \u0627\u06cc \u0648 \u062a\u0644\u0641\u0646 \u0647\u0645\u0631\u0627\u0647 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0622\u0646 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0631\u0627\u06cc\u06af\u0627\u0646 \u0627\u0645\u062a\u062d\u0627\u0646 \u06a9\u0646\u06cc\u062f.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0646\u0648\u0634\u062a\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u0627\u0644\u06a9 \u0628\u0631\u0648\u0646\u0644\u270f\ufe0f The State of Developer Ecosystem 2022 \u062a\u0627\u06cc\u067e \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0632\u0628\u0627\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0633\u0631\u06cc\u0639\u062a\u0631\u06cc\u0646 \u0631\u0634\u062f \u0645\u0639\u0631\u0641\u06cc \u06a9\u0631\u062f. \u0633\u062e\u062a \u0646\u06cc\u0633\u062a \u06a9\u0647 \u0628\u0641\u0647\u0645\u06cc\u0645 \u0686\u0631\u0627. \u0627\u06cc\u0646 \u0627\u0628\u0631\u0645\u062c\u0645\u0648\u0639\u0647 \u0645\u062d\u0628\u0648\u0628 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0686\u06a9 \u06a9\u0631\u062f\u0646 \u0646\u0648\u0639\u060c enums \u0648 \u0633\u0627\u06cc\u0631 \u067e\u06cc\u0634\u0631\u0641\u062a\u200c\u0647\u0627 \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc\u200c\u06a9\u0646\u062f. \u0627\u0645\u0627 \u0627\u063a\u0644\u0628\u060c TypeScript \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0627\u0646\u062a\u0638\u0627\u0631 \u0631\u0627 \u0645\u0639\u0631\u0641\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u0647\u0646\u0648\u0632 \u0628\u062e\u0634\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":20917,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-20916","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/20916","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=20916"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/20916\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/20917"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=20916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=20916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=20916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}