{"id":2152,"date":"2025-11-23T23:03:36","date_gmt":"2025-11-23T20:03:36","guid":{"rendered":"https:\/\/gerdlezhev.ru\/?p=2152"},"modified":"2025-10-30T23:11:06","modified_gmt":"2025-10-30T20:11:06","slug":"typescript-%d0%bd%d0%b0-linux-%d0%b8%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d1%8b-%d0%bf%d1%80%d0%be%d0%b8%d0%b7%d0%b2%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d0%be%d1%81","status":"publish","type":"post","link":"https:\/\/gerdlezhev.ru\/?p=2152","title":{"rendered":"TypeScript \u043d\u0430 Linux: \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"linux---typescript\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435: \u041f\u043e\u0447\u0435\u043c\u0443 Linux \u0438\u0434\u0435\u0430\u043b\u0435\u043d \u0434\u043b\u044f TypeScript \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h2>\n\n\n\n<p>\u0412 2025 \u0433\u043e\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u0441\u0435 \u0447\u0430\u0449\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 Linux \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 TypeScript. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, 64% \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u043e\u0432, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0441 TypeScript \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Linux \u043b\u0438\u0431\u043e \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u041e\u0421, \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 WSL. \u042d\u0442\u043e \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u044c\u2014Linux \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n\n\n\n<p>\u041d\u0430 Linux TypeScript \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 30-40% \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0434 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u043b\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 50 000 \u0441\u0442\u0440\u043e\u043a TypeScript \u043a\u043e\u0434\u0430, \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 Linux \u0438 Windows \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c 10-15 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e 8 \u0447\u0430\u0441\u043e\u0432 \u0432 \u0434\u0435\u043d\u044c \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0439, \u044d\u0442\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 1-2 \u0447\u0430\u0441\u0430 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e.<\/p>\n\n\n\n<p>\u0424\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0439 \u0430\u0441\u043f\u0435\u043a\u0442 \u0442\u0430\u043a\u0436\u0435 \u0432\u0430\u0436\u0435\u043d: Linux \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u0435\u043d, \u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u0437\u043a\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u0445) \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0430 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\u0445. \u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 50 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Linux \u0432\u043c\u0435\u0441\u0442\u043e Windows \u0438\u043b\u0438 macOS, \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c 200 000-500 000 \u0440\u0443\u0431\u043b\u0435\u0439 \u0432 \u0433\u043e\u0434 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\u0445.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"1---typescript--linux\">1. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 TypeScript \u043d\u0430 Linux<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">1.1 \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/h2>\n\n\n\n<p>\u0420\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 Linux \u0438 Windows \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u044b \u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 TypeScript.<\/p>\n\n\n\n<p><strong>Linux \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 (ext4, XFS):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043c\u0435\u043b\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432<\/li>\n\n\n\n<li>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 inode \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 (dentries)<\/li>\n\n\n\n<li>\u041d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/li>\n\n\n\n<li>\u0412 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u043c TypeScript \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c 10 000-100 000 \u0444\u0430\u0439\u043b\u043e\u0432<\/li>\n<\/ul>\n\n\n\n<p><strong>Windows \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 (NTFS):<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441 \u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c<\/li>\n\n\n\n<li>\u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0430\u0439\u043b\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 MFT (Master File Table)<\/li>\n\n\n\n<li>\u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u0430<\/li>\n\n\n\n<li>\u0410\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u043e\u0435 \u041f\u041e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/li>\n<\/ul>\n\n\n\n<p><strong>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440:<\/strong><br>\u041f\u0440\u043e\u0435\u043a\u0442 Visual Studio Code \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 1,505,000 \u0441\u0442\u0440\u043e\u043a TypeScript \u043a\u043e\u0434\u0430. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u043c Microsoft, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u041d\u0430 Linux (\u0441 \u043d\u043e\u0432\u044b\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u043d\u0430 Go): 7.5 \u0441\u0435\u043a\u0443\u043d\u0434<\/li>\n\n\n\n<li>\u041d\u0430 Windows (WSL2): 12-15 \u0441\u0435\u043a\u0443\u043d\u0434<\/li>\n\n\n\n<li>\u041d\u0430 Windows (native): 25-30 \u0441\u0435\u043a\u0443\u043d\u0434<\/li>\n<\/ul>\n\n\n\n<p>\u0411\u0438\u0437\u043d\u0435\u0441-\u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 30 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0434 50 \u0440\u0430\u0437 \u0432 \u0434\u0435\u043d\u044c:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Linux: 6.25 \u0447\u0430\u0441\u043e\u0432 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e<\/li>\n\n\n\n<li>Windows: 10-12 \u0447\u0430\u0441\u043e\u0432 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">1.2 \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 package.json \u0438 node_modules<\/h2>\n\n\n\n<p>Linux \u0438\u043c\u0435\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 Node.js \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c (symlinks) \u0438 \u043f\u0440\u0430\u0432\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430.<\/p>\n\n\n\n<p><strong>\u0421\u0438\u043c\u043b\u0438\u043d\u043a\u0438 \u043d\u0430 Linux:<\/strong>&nbsp;\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435, \u0431\u044b\u0441\u0442\u0440\u044b\u0435, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432<\/p>\n\n\n\n<p><strong>\u0421\u0438\u043c\u043b\u0438\u043d\u043a\u0438 \u043d\u0430 Windows:<\/strong>&nbsp;\u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0441\u043a\u0438\u0445 \u043f\u0440\u0430\u0432 \u0438\u043b\u0438 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0447\u0430\u0441\u0442\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0441\u0440\u0435\u0434\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/p>\n\n\n\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u043c\u0435\u0435\u0442 \u043e\u0442 500 \u0434\u043e 2000 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u043e\u0441\u043b\u0435 npm install. \u041d\u0430 Linux npm \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u0438\u043c\u043b\u0438\u043d\u043a\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e, \u043d\u0430 Windows \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"2-runtime---linux--nodejs-deno--bun\">2. Runtime \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Linux: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 Node.js, Deno \u0438 Bun<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">2.1 Node.js 22+ \u0441 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 TypeScript<\/h2>\n\n\n\n<p>\u0421 \u0432\u044b\u0445\u043e\u0434\u043e\u043c Node.js 22.6.0 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0440\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c TypeScript \u0444\u0430\u0439\u043b\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0431\u0435\u0437 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n\n\n\n<p><strong>\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 TypeScript \u0432 Node.js 23.6.0+:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash <code>node script.ts<br><\/code><\/pre>\n\n\n\n<p>Node.js \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u0434. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430 Linux \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c TypeScript.<\/p>\n\n\n\n<p><strong>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0425\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442: 100-150ms<\/li>\n\n\n\n<li>\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e JavaScript (\u0442\u0438\u043f\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f)<\/li>\n\n\n\n<li>\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 npm \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438: 100%<\/li>\n\n\n\n<li>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438: \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 V8 (80-150MB)<\/li>\n<\/ul>\n\n\n\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Node.js:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Production \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0434\u043e\u043b\u0433\u0438\u043c \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c<\/li>\n\n\n\n<li>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0432 Node.js \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435<\/li>\n\n\n\n<li>\u041a\u043e\u0433\u0434\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 npm \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438<\/li>\n\n\n\n<li>\u041a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2.2 Deno 2: \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 TypeScript<\/h2>\n\n\n\n<p>Deno \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d Ryan Dahl (\u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u043c Node.js) \u0432 2018 \u0433\u043e\u0434\u0443 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u0432\u0438\u0434\u0435\u043b \u0432 Node.js. \u0412 2024-2025 \u0433\u043e\u0434\u0443 Deno 2 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0434\u043e\u0441\u0442\u0438\u0433 Production-ready \u0441\u0442\u0430\u0442\u0443\u0441\u0430.<\/p>\n\n\n\n<p><strong>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 Deno:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f TypeScript \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430:<\/strong>\u00a0Deno \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 TypeScript \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432 \u0432\u0438\u0434\u0435 V8 snapshot, \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/li>\n\n\n\n<li><strong>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438:<\/strong>\u00a0\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e Deno \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (\u0447\u0442\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u0441\u0435\u0442\u044c) \u0435\u0441\u043b\u0438 \u044f\u0432\u043d\u043e \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<br><code>deno run --allow-read --allow-net --allow-env script.ts<br><\/code><\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 APIs:<\/strong>\u00a0Deno \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Web API \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b (fetch, WebSocket, TextEncoder \u0432\u043c\u0435\u0441\u0442\u043e Node.js \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 API)<\/li>\n\n\n\n<li><strong>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438:<\/strong>\u00a0URL-based imports \u0432\u043c\u0435\u0441\u0442\u043e node_modules:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-preformatted\">typescript<br><code>import { serve } from \"https:\/\/deno.land\/std@0.208.0\/http\/server.ts\";<br><\/code><\/pre>\n\n\n\n<p><strong>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 Linux:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0425\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442: 150-200ms<\/li>\n\n\n\n<li>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c HTTP \u0441\u0435\u0440\u0432\u0435\u0440\u0430: 68,851 RPS (vs Node.js 16,818 RPS)<\/li>\n\n\n\n<li>\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 4x \u043b\u0443\u0447\u0448\u0430\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0432 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445<\/li>\n<\/ul>\n\n\n\n<p><strong>\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439:<\/strong><br>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 Deno \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 50 000 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0447\u0430\u0441. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Node.js \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0431\u044b 6 instances \u0434\u043b\u044f \u0442\u043e\u0439 \u0436\u0435 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043f\u0440\u0438 Deno \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e 2 instances.<\/p>\n\n\n\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Deno:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u041d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0431\u0435\u0437 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043e\u0442 npm<\/li>\n\n\n\n<li>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 CLI \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/li>\n\n\n\n<li>\u041a\u043e\u0433\u0434\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430 (embedded \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, Untrusted code)<\/li>\n\n\n\n<li>Microservices \u0441 \u043d\u0438\u0437\u043a\u0438\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2.3 Bun: \u0440\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438<\/h2>\n\n\n\n<p>Bun\u2014\u044d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0441 \u043d\u0443\u043b\u044f runtime, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Zig \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c JavaScriptCore (\u043c\u043e\u0442\u043e\u0440 Safari) \u0432\u043c\u0435\u0441\u0442\u043e V8.<\/p>\n\n\n\n<p><strong>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0435\u0440\u0442\u0430 Bun: \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 toolkit<\/strong><\/p>\n\n\n\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 20+ \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, Bun \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u041f\u0430\u043a\u0435\u0442-\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 (10-25x \u0431\u044b\u0441\u0442\u0440\u0435\u0435 npm)<\/li>\n\n\n\n<li>Bundler<\/li>\n\n\n\n<li>Test runner<\/li>\n\n\n\n<li>TypeScript transpiler<\/li>\n\n\n\n<li>Development server<\/li>\n<\/ul>\n\n\n\n<p><strong>\u0412\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0438\u0435 \u0446\u0438\u0444\u0440\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<\/th><th>Node.js<\/th><th>Deno<\/th><th>Bun<\/th><th>\u0412\u044b\u0438\u0433\u0440\u044b\u0448 Bun<\/th><\/tr><\/thead><tbody><tr><td>npm install (1000 \u043f\u0430\u043a\u0435\u0442\u043e\u0432)<\/td><td>120\u0441<\/td><td>95\u0441<\/td><td>5-8\u0441<\/td><td>15-24x<\/td><\/tr><tr><td>TypeScript \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f (100k LOC)<\/td><td>8-10\u0441<\/td><td>7-9\u0441<\/td><td>0.8-1.2\u0441<\/td><td>8-10x<\/td><\/tr><tr><td>Jest \u0442\u0435\u0441\u0442\u044b (1000 \u0442\u0435\u0441\u0442\u043e\u0432)<\/td><td>25\u0441<\/td><td>&#8212;<\/td><td>2-3\u0441<\/td><td>8-12x<\/td><\/tr><tr><td>\u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442)<\/td><td>100-150ms<\/td><td>150-200ms<\/td><td>10-15ms<\/td><td>10x<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438:<\/strong><br>\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u0430\u043c\u0438 \u043d\u0430 Bun \u0441 50 000 \u0441\u0442\u0440\u043e\u043a TypeScript:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0446\u0438\u043a\u043b\u0430: 5 \u043c\u0438\u043d\u0443\u0442 (\u0432\u043c\u0435\u0441\u0442\u043e 15 \u043c\u0438\u043d\u0443\u0442 \u043d\u0430 Node.js)<\/li>\n\n\n\n<li>\u041f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438: 45MB (\u0432\u043c\u0435\u0441\u0442\u043e 150MB \u043d\u0430 Node.js)<\/li>\n\n\n\n<li>\u0412\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f: 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b (\u0432\u043c\u0435\u0441\u0442\u043e 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 Node.js)<\/li>\n<\/ul>\n\n\n\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Bun:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u041f\u0440\u043e\u0435\u043a\u0442\u044b, \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435 \u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/li>\n\n\n\n<li>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u044b<\/li>\n\n\n\n<li>\u041f\u0440\u043e\u0435\u043a\u0442\u044b, \u0433\u0434\u0435 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c runtime \u043a\u043e\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0435\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b<\/li>\n\n\n\n<li>\u041d\u043e\u0432\u044b\u0435 \u0441\u0442\u0430\u0440\u0442\u0430\u043f\u044b \u0431\u0435\u0437 legacy \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0439<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"3-typescript-runtime--linux-tsx-vs-ts-node\">3. TypeScript Runtime \u043d\u0430 Linux: tsx vs ts-node<\/h2>\n\n\n\n<p>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c TypeScript \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3.1 tsx: \u0431\u044b\u0441\u0442\u0440\u044b\u0439, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434<\/h2>\n\n\n\n<p>tsx \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u0431\u0430\u0437\u0435 esbuild \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432.<\/p>\n\n\n\n<p><strong>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<br><code>npm install -D tsx<br><em># \u0418\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/em><br>npx tsx script.ts<br><\/code><\/pre>\n\n\n\n<p><strong>\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 tsx:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0425\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442: 20ms<\/li>\n\n\n\n<li>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f esbuild (100x+ \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0447\u0435\u043c tsc)<\/li>\n\n\n\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432: \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f (\u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u00a0<code>tsc --noEmit<\/code>)<\/li>\n\n\n\n<li>\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438: \u043d\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a TypeScript (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0435 \u043f\u0430\u0440\u0441\u0438\u043d\u0433)<\/li>\n\n\n\n<li>Watch mode: \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439\u00a0<code>tsx watch script.ts<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u0430\u044f \u0441\u0445\u0435\u043c\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441 tsx:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<code><em># \u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b 1: \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435<\/em>\ntsx watch src\/server.ts\n\n<em># \u0422\u0435\u0440\u043c\u0438\u043d\u0430\u043b 2: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 \u0432 \u0444\u043e\u043d\u0435<\/em>\ntsc --noEmit --watch\n<\/code><\/pre>\n\n\n\n<p>\u042d\u0442\u0430 \u0441\u0445\u0435\u043c\u0430 \u0434\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438\u2014\u043a\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3.2 ts-node: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/h2>\n\n\n\n<p>ts-node \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 TypeScript \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0438\u043f\u043e\u0432 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435.<\/p>\n\n\n\n<p><strong>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<br><code>npm install -D ts-node<br>npx ts-node script.ts<br><\/code><\/pre>\n\n\n\n<p><strong>\u0425\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 ts-node:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0425\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442: 500-800ms<\/li>\n\n\n\n<li>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f: \u043f\u043e\u043b\u043d\u0430\u044f TypeScript \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f<\/li>\n\n\n\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432: \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435<\/li>\n\n\n\n<li>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f: TypeScript \u043a\u0430\u043a peer dependency<\/li>\n\n\n\n<li>Type checking: \u043f\u043e\u043b\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430<\/li>\n<\/ul>\n\n\n\n<p><strong>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438:<\/strong><\/p>\n\n\n\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u0437 20 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u0444\u0435\u043b\u0435\u043c. \u041a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0411\u0414 5 \u0440\u0430\u0437 \u0432 \u0434\u0435\u043d\u044c:<\/p>\n\n\n\n<p>tsx \u043f\u043e\u0434\u0445\u043e\u0434:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u0441\u043a\u0440\u0438\u043f\u0442: 2s \u00d7 5 \u00d7 20 \u00d7 250 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 = 1000 \u0447\u0430\u0441\u043e\u0432 \u0432 \u0433\u043e\u0434<\/li>\n\n\n\n<li>\u041d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0441\u0442\u0438: \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0442\u0438\u043f\u043e\u0432<\/li>\n<\/ul>\n\n\n\n<p>ts-node \u043f\u043e\u0434\u0445\u043e\u0434:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u0441\u043a\u0440\u0438\u043f\u0442: 7s \u00d7 5 \u00d7 20 \u00d7 250 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0434\u043d\u0435\u0439 = 3500 \u0447\u0430\u0441\u043e\u0432 \u0432 \u0433\u043e\u0434<\/li>\n\n\n\n<li>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e: \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u043e\u0432<\/li>\n<\/ul>\n\n\n\n<p>\u0412\u044b\u0438\u0433\u0440\u044b\u0448: 2500 \u0447\u0430\u0441\u043e\u0432 \u0432 \u0433\u043e\u0434 (1.2 FTE \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"4--linux-----typescript\">4. \u0421\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 Linux \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 TypeScript<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">4.1 \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 TypeScript \u043d\u0430 Go (TypeScript 7.0+)<\/h2>\n\n\n\n<p>Microsoft \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430 \u0432 \u043c\u0430\u0440\u0442\u0435 2025 \u0433\u043e\u0434\u0430 \u043e \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 TypeScript \u043d\u0430 \u044f\u0437\u044b\u043a Go. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441.<\/p>\n\n\n\n<p><strong>\u0422\u0435\u043a\u0443\u0449\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b (March 2025):<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u041f\u0440\u043e\u0435\u043a\u0442<\/th><th>\u0420\u0430\u0437\u043c\u0435\u0440<\/th><th>\u0422\u0435\u043a\u0443\u0449\u0438\u0439 tsc<\/th><th>Native (Go)<\/th><th>\u0423\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435<\/th><\/tr><\/thead><tbody><tr><td>VS Code<\/td><td>1.5M LOC<\/td><td>77.8s<\/td><td>7.5s<\/td><td>10.4x<\/td><\/tr><tr><td>Playwright<\/td><td>356k LOC<\/td><td>11.1s<\/td><td>1.1s<\/td><td>10.1x<\/td><\/tr><tr><td>TypeORM<\/td><td>270k LOC<\/td><td>17.5s<\/td><td>1.3s<\/td><td>13.5x<\/td><\/tr><tr><td>date-fns<\/td><td>104k LOC<\/td><td>6.5s<\/td><td>0.7s<\/td><td>9.5x<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u0414\u043b\u044f Linux \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f (\u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432) \u044d\u0442\u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 workflow:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0427\u0442\u043e \u0436\u0434\u0430\u043b\u043e 60+ \u0441\u0435\u043a\u0443\u043d\u0434 \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0437\u0430 5-6 \u0441\u0435\u043a\u0443\u043d\u0434<\/li>\n\n\n\n<li>CI\/CD pipelines \u0443\u0441\u043a\u043e\u0440\u044f\u044e\u0442\u0441\u044f \u043d\u0430 80-90%<\/li>\n\n\n\n<li>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0442\u0438\u043f\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u0435\u0437 \u0443\u0449\u0435\u0440\u0431\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/li>\n<\/ul>\n\n\n\n<p><strong>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<br><code>npm install -D @typescript\/go-compiler<br><br><em># \u0412 tsconfig.json<\/em><br>{<br>  \"compilerOptions\": {<br>    \"useNativeCompiler\": true<br>  }<br>}<br><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4.2 esbuild: \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0431\u0430\u043d\u0434\u043b\u0435\u0440 \u043d\u0430 Go<\/h2>\n\n\n\n<p>esbuild\u2014\u044d\u0442\u043e \u0431\u0430\u043d\u0434\u043b\u0435\u0440, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 Go, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 100x \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c Webpack.<\/p>\n\n\n\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bundling: \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/li>\n\n\n\n<li>Minification: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f<\/li>\n\n\n\n<li>TypeScript \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430: \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f<\/li>\n\n\n\n<li>Watch mode: \u0433\u043e\u0440\u044f\u0447\u0430\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430<\/li>\n<\/ul>\n\n\n\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f backend \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">javascript<code><em>\/\/ build.js<\/em>\nrequire('esbuild').buildSync({\n  entryPoints: ['src\/index.ts'],\n  outfile: 'dist\/index.js',\n  bundle: true,\n  platform: 'node',\n  target: 'node22',\n  minify: true,\n  sourcemap: true,\n  external: ['express', 'pg', 'redis'] <em>\/\/ \u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0435 \u0431\u0430\u043d\u0434\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438<\/em>\n});\n<\/code><\/pre>\n\n\n\n<p><strong>Performance \u043d\u0430 Linux:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 (50k LOC): 200-400ms (vs 2-3 \u043c\u0438\u043d\u0443\u0442\u044b \u0441 Webpack)<\/li>\n\n\n\n<li>Watch mode \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0439\u043a\u0430: 50-100ms<\/li>\n\n\n\n<li>\u0412\u044b\u0438\u0433\u0440\u044b\u0448: \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0432\u0438\u0434\u0438\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">4.3 Vite: \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h2>\n\n\n\n<p>Vite \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d Evan You (\u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c Vue) \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043b\u0443\u0447\u0448\u0438\u0439 experience \u0434\u043b\u044f development.<\/p>\n\n\n\n<p><strong>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 Vite:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Development mode:<\/strong>\u00a0\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 ES \u043c\u043e\u0434\u0443\u043b\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0447\u0435\u0440\u0435\u0437 HTTP (no bundling)<\/li>\n\n\n\n<li><strong>Production mode:<\/strong>\u00a0\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 Rollup \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438<\/li>\n\n\n\n<li><strong>TypeScript:<\/strong>\u00a0\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 esbuild<\/li>\n<\/ol>\n\n\n\n<p><strong>\u041d\u0430 Linux Vite \u0434\u0430\u0435\u0442:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>HMR (Hot Module Replacement): \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0437\u0430 10-50ms<\/li>\n\n\n\n<li>\u041c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 cold start: \u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0437\u0430 100ms<\/li>\n\n\n\n<li>\u0413\u0440\u0430\u0434\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f: \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">4.4 swc: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0430 Rust \u0434\u043b\u044f JavaScript\/TypeScript<\/h2>\n\n\n\n<p>swc \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Rust \u0438 \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c Babel \u0438 ts compiler.<\/p>\n\n\n\n<p><strong>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>TypeScript to JavaScript \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: 20x \u0431\u044b\u0441\u0442\u0440\u0435\u0435 Babel<\/li>\n\n\n\n<li>JSX \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: \u0432 6x \u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/li>\n\n\n\n<li>Source maps: \u043f\u043e\u043b\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430<\/li>\n<\/ul>\n\n\n\n<p><strong>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 jest \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">javascript<code><em>\/\/ jest.config.js<\/em>\nmodule.exports = {\n  preset: 'ts-jest',\n  transform: {\n    '^.+\\\\.tsx?$': ['@swc\/jest', {\n      jsc: {\n        parser: { syntax: 'typescript' },\n        transform: {}\n      }\n    }]\n  }\n};\n<\/code><\/pre>\n\n\n\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u0442\u0435\u0441\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 2-3 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"5------typescript\">5. \u041c\u0435\u0442\u043e\u0434\u044b \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0438 \u0431\u0435\u0437\u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f TypeScript \u043a\u043e\u0434\u0430<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">5.1 GitHub Copilot: AI-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h2>\n\n\n\n<p>GitHub Copilot \u0432 2025 \u0433\u043e\u0434\u0443 \u043f\u0440\u043e\u0448\u0435\u043b \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u044e \u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e code completion \u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430 \u043a\u043e\u0434\u0430.<\/p>\n\n\n\n<p><strong>\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0446\u0438\u0444\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Copilot:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>15 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 (400% \u0440\u043e\u0441\u0442 \u0437\u0430 \u0433\u043e\u0434)<\/li>\n\n\n\n<li>Developers \u043f\u0438\u0448\u0443\u0442 46% \u043a\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Copilot<\/li>\n\n\n\n<li>\u0417\u0430\u0434\u0430\u0447\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442\u0441\u044f \u043d\u0430 55% \u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/li>\n\n\n\n<li>88% \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438<\/li>\n\n\n\n<li>\u0414\u043b\u044f Java \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432: \u0434\u043e 61% \u043a\u043e\u0434\u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f Copilot<\/li>\n\n\n\n<li>\u0414\u043b\u044f TypeScript \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432: 30-35% \u043a\u043e\u0434\u0430<\/li>\n<\/ul>\n\n\n\n<p><strong>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f Copilot \u0441 TypeScript \u043d\u0430 Linux:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<code><em># \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432 VS Code \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 GitHub Copilot<\/em>\n\n<em># VS Code \u043d\u0430 Linux<\/em>\ncode --install-extension GitHub.Copilot\ncode --install-extension GitHub.Copilot-Chat\n<\/code><\/pre>\n\n\n\n<p><strong>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 workflow \u0434\u043b\u044f backend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">typescript<code><em>\/\/ 1. \u0412\u0432\u043e\u0434\u0438\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044e<\/em>\n<em>\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u0443\u044e \u0446\u0435\u043d\u0443 \u0430\u043a\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u044a\u0435\u043c\u043e\u0432 \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0438<\/em>\n\n<em>\/\/ 2. Copilot \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e<\/em>\nconst calculateWeightedAveragePrice = (trades: Trade[]): number =&gt; {\n  const totalVolume = trades.reduce((sum, t) =&gt; sum + t.volume, 0);\n  const weightedSum = trades.reduce((sum, t) =&gt; sum + (t.price * t.volume), 0);\n  return weightedSum \/ totalVolume;\n};\n\n<em>\/\/ 3. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438<\/em>\n<em>\/\/ \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0442\u0438\u043f\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 edge cases<\/em>\nconst calculateWeightedAveragePriceOptimized = (\n  trades: readonly Trade[]\n): number =&gt; {\n  if (trades.length === 0) throw new Error(\"\u041c\u0430\u0441\u0441\u0438\u0432 \u0442\u043e\u0440\u0433\u043e\u0432 \u043f\u0443\u0441\u0442\");\n  \n  const totalVolume = trades.reduce((sum, t) =&gt; sum + t.volume, 0);\n  if (totalVolume === 0) throw new Error(\"\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043c \u043d\u0443\u043b\u0435\u0432\u043e\u0439\");\n  \n  const weightedSum = trades.reduce((sum, t) =&gt; sum + (t.price * t.volume), 0);\n  return Math.round((weightedSum \/ totalVolume) * 100) \/ 100;\n};\n<\/code><\/pre>\n\n\n\n<p><strong>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438:<\/strong><\/p>\n\n\n\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u0437 10 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0411\u0435\u0437 Copilot: 40 \u0447\u0430\u0441\u043e\u0432 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/li>\n\n\n\n<li>\u0421 Copilot: 18 \u0447\u0430\u0441\u043e\u0432 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (55% \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435)<\/li>\n\n\n\n<li>\u0421\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f: 22 \u0447\u0430\u0441\u0430 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e \u00d7 50 \u043d\u0435\u0434\u0435\u043b\u044c \u00d7 10 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 = 11 000 \u0447\u0430\u0441\u043e\u0432 \u0432 \u0433\u043e\u0434<\/li>\n\n\n\n<li>\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 Copilot: $10\/\u043c\u0435\u0441\u044f\u0446 \u00d7 10 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u00d7 12 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 = $1200 \u0432 \u0433\u043e\u0434<\/li>\n\n\n\n<li>ROI: 11 000 \u0447\u0430\u0441\u043e\u0432 \u043f\u043e $150\/\u0447\u0430\u0441 = $1.65 \u043c\u043b\u043d \u0432 \u0433\u043e\u0434 \u0438\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u0438 \u0432 Copilot<\/li>\n<\/ul>\n\n\n\n<p><strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f Copilot \u0438 \u043a\u0430\u043a \u0438\u0445 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Copilot \u0441\u043b\u0430\u0431\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 complex business logic<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u0414\u0430\u0439\u0442\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u041c\u043e\u0436\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0439 \u043a\u043e\u0434<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u0412\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435\u00a0<code>npm audit<\/code>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 SAST \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u041d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 best practices<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 ESLint \u0441\u0442\u0440\u043e\u0433\u043e, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 code review \u0434\u043b\u044f Copilot-generated \u043a\u043e\u0434\u0430<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">5.2 Scaffolding \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430<\/h2>\n\n\n\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">create-ts-fast: \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f NPM \u043f\u0430\u043a\u0435\u0442\u043e\u0432<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<br><code>npm create ts-fast@latest my-package<br><br><em># \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d (axios, lodash, zod, etc)<\/em><br><em># \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0437\u0430 30 \u0441\u0435\u043a\u0443\u043d\u0434<\/em><br><\/code><\/pre>\n\n\n\n<p>\u0427\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>TypeScript \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f (\u0441\u0442\u0440\u043e\u0433\u0430\u044f)<\/li>\n\n\n\n<li>ESLint \u0441 TypeScript \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439<\/li>\n\n\n\n<li>Prettier \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/li>\n\n\n\n<li>Vitest \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/li>\n\n\n\n<li>GitHub Actions CI\/CD<\/li>\n\n\n\n<li>npm publish \u0441\u043a\u0440\u0438\u043f\u0442\u044b<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">create-ts-frame: \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 scaffolder<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<br><code>npm create ts-frame@latest<br><br><em># \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0442\u0438\u043f \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/em><br><em># - CLI \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/em><br><em># - Library<\/em><br><em># - React \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435)<\/em><br><em># - Vue \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435)<\/em><br><\/code><\/pre>\n\n\n\n<p><strong>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435: \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u043d\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 vs scaffolding<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f<\/th><th>\u0420\u0443\u0447\u043d\u043e\u0435<\/th><th>Scaffolding<\/th><th>\u0421\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u0435\u043d\u043e<\/th><\/tr><\/thead><tbody><tr><td>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u0430\u043f\u043e\u043a<\/td><td>5 \u043c\u0438\u043d<\/td><td>10 \u0441\u0435\u043a<\/td><td>4:50<\/td><\/tr><tr><td>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 tsconfig.json<\/td><td>10 \u043c\u0438\u043d<\/td><td>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/td><td>10 \u043c\u0438\u043d<\/td><\/tr><tr><td>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 ESLint<\/td><td>15 \u043c\u0438\u043d<\/td><td>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/td><td>15 \u043c\u0438\u043d<\/td><\/tr><tr><td>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Prettier<\/td><td>10 \u043c\u0438\u043d<\/td><td>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/td><td>10 \u043c\u0438\u043d<\/td><\/tr><tr><td>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f git<\/td><td>2 \u043c\u0438\u043d<\/td><td>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/td><td>2 \u043c\u0438\u043d<\/td><\/tr><tr><td>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 README<\/td><td>5 \u043c\u0438\u043d<\/td><td>\u0448\u0430\u0431\u043b\u043e\u043d \u0433\u043e\u0442\u043e\u0432<\/td><td>5 \u043c\u0438\u043d<\/td><\/tr><tr><td><strong>\u0418\u0442\u043e\u0433\u043e<\/strong><\/td><td><strong>47 \u043c\u0438\u043d\u0443\u0442<\/strong><\/td><td><strong>1 \u043c\u0438\u043d\u0443\u0442\u0430<\/strong><\/td><td><strong>46 \u043c\u0438\u043d\u0443\u0442<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">5.3 ESLint + Prettier: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a<\/h2>\n\n\n\n<p>ESLint \u0432\u044b\u044f\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043b\u0443\u0447\u0448\u0438\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u043c, Prettier \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u0434.<\/p>\n\n\n\n<p><strong>\u0411\u044b\u0441\u0442\u0440\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0430 Linux:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<code><em># \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/em>\nnpm install -D eslint prettier @typescript-eslint\/eslint-plugin @typescript-eslint\/parser eslint-config-prettier\n\n<em># \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 .eslintrc.json<\/em>\ncat &gt; .eslintrc.json &lt;&lt; 'EOF'\n{\n  \"parser\": \"@typescript-eslint\/parser\",\n  \"extends\": [\n    \"eslint:recommended\",\n    \"plugin:@typescript-eslint\/recommended\",\n    \"prettier\"\n  ],\n  \"plugins\": [\"@typescript-eslint\"],\n  \"rules\": {\n    \"no-unused-vars\": \"off\",\n    \"@typescript-eslint\/no-unused-vars\": [\"error\"],\n    \"@typescript-eslint\/no-explicit-any\": \"error\",\n    \"@typescript-eslint\/explicit-function-return-types\": \"warn\"\n  }\n}\nEOF\n\n<em># \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 .prettierrc.json<\/em>\ncat &gt; .prettierrc.json &lt;&lt; 'EOF'\n{\n  \"semi\": true,\n  \"trailingComma\": \"es5\",\n  \"singleQuote\": true,\n  \"printWidth\": 100,\n  \"arrowParens\": \"always\"\n}\nEOF\n\n<em># \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 package.json<\/em>\nnpm set-script lint \"eslint src --ext .ts,.tsx\"\nnpm set-script lint:fix \"eslint src --ext .ts,.tsx --fix &amp;&amp; prettier --write src\"\n<\/code><\/pre>\n\n\n\n<p><strong>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 (VS Code \u043d\u0430 Linux):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">json<code><em>\/\/ .vscode\/settings.json<\/em>\n{\n  \"editor.defaultFormatter\": \"esbenp.prettier-vscode\",\n  \"editor.formatOnSave\": true,\n  \"editor.codeActionsOnSave\": {\n    \"source.fixAll.eslint\": true\n  },\n  \"[typescript]\": {\n    \"editor.defaultFormatter\": \"esbenp.prettier-vscode\"\n  }\n}\n<\/code><\/pre>\n\n\n\n<p><strong>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/strong>&nbsp;\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u043b\u044e\u0431\u044b\u043c \u0441\u0442\u0438\u043b\u0435\u043c, \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 (ESLint)<\/li>\n\n\n\n<li>\u0424\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u0434 (Prettier)<\/li>\n\n\n\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0442\u0438\u043f\u044b (\u0435\u0441\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e)<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">5.4 Pre-commit hooks: \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 bad code \u043f\u0435\u0440\u0435\u0434 commit<\/h2>\n\n\n\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 husky \u0438 lint-staged \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 bad code \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<code><em># \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/em>\nnpm install -D husky lint-staged\n\n<em># \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f husky<\/em>\nnpx husky install\n\n<em># \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 pre-commit hook<\/em>\nnpx husky add .husky\/pre-commit \"npx lint-staged\"\n\n<em># \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f lint-staged \u0432 package.json<\/em>\nnpm set-script prepare \"husky install\"\n\n<em># package.json<\/em>\n{\n  \"lint-staged\": {\n    \"*.ts\": \"eslint --fix\",\n    \"*.{ts,tsx,json}\": \"prettier --write\"\n  }\n}\n<\/code><\/pre>\n\n\n\n<p><strong>Workflow:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<code><em># \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0438\u0448\u0435\u0442 \u043a\u043e\u0434<\/em>\necho \"const x:any = 5\" &gt; src\/bad.ts\n\n<em># \u041f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c commit<\/em>\ngit add .\ngit commit -m \"Add bad code\"\n\n<em># Pre-commit hook \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 commit<\/em>\n<em># \u274c ESLint error: no-explicit-any<\/em>\n<em># Commit \u043e\u0442\u043c\u0435\u043d\u0435\u043d<\/em>\n\n<em># ESLint \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 --fix<\/em>\nnpx eslint src\/bad.ts --fix\n\n<em># Commit \u0443\u0441\u043f\u0435\u0448\u0435\u043d \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/em>\ngit commit -m \"Add fixed code\"\n<em># \u2705 Success<\/em>\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">5.5 Type-driven development: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0430 API<\/h2>\n\n\n\n<p>\u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0438\u043f\u044b. \u042d\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0430 30-40%.<\/p>\n\n\n\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440: \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 API \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u0442\u0444\u0435\u043b\u0435\u043c \u0430\u043a\u0446\u0438\u0439<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">typescript<code><em>\/\/ 1. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/em>\ninterface Stock {\n  symbol: string;\n  shares: number;\n  purchasePrice: number;\n  currentPrice: number;\n}\n\ninterface Portfolio {\n  id: string;\n  name: string;\n  stocks: Stock[];\n  createdAt: Date;\n}\n\ninterface PortfolioStats {\n  totalValue: number;\n  gainLoss: number;\n  gainLossPercent: number;\n  allocation: Record&lt;string, number&gt;;\n}\n\n<em>\/\/ 2. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c API \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442<\/em>\ninterface IPortfolioService {\n  getPortfolio(id: string): Promise&lt;Portfolio&gt;;\n  addStock(portfolioId: string, stock: Stock): Promise&lt;Portfolio&gt;;\n  removeStock(portfolioId: string, symbol: string): Promise&lt;Portfolio&gt;;\n  calculateStats(portfolio: Portfolio): PortfolioStats;\n  rebalance(portfolio: Portfolio, targetAllocation: Record&lt;string, number&gt;): Stock[];\n}\n\n<em>\/\/ 3. \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430<\/em>\nclass PortfolioService implements IPortfolioService {\n  <em>\/\/ TypeScript \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u043d\u0430\u0435\u0442 \u043e \u043a\u0430\u0436\u0434\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435, \u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435, \u0442\u0438\u043f\u0430\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<\/em>\n  <em>\/\/ Copilot \u043c\u043e\u0436\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u0442\u0438\u043f\u0430\u0445<\/em>\n  \n  async getPortfolio(id: string): Promise&lt;Portfolio&gt; {\n    <em>\/\/ Implementation<\/em>\n  }\n  \n  <em>\/\/ \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b...<\/em>\n}\n<\/code><\/pre>\n\n\n\n<p><strong>\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>API \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d \u0432\u0441\u0435\u043c \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435<\/li>\n\n\n\n<li>Copilot \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0431\u0435\u0437\u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0438\u043f\u043e\u0432<\/li>\n\n\n\n<li>Frontend \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u0435 \u0434\u043e\u0436\u0438\u0434\u0430\u044f\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 backend<\/li>\n\n\n\n<li>\u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442\u0441\u044f<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"6-------linux\">6. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430 Linux<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">6.1 Monorepo structure \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h2>\n\n\n\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u0430\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e. Monorepo \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u043c\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">text<code>portfolio-platform\/\n\u251c\u2500\u2500 packages\/\n\u2502   \u251c\u2500\u2500 core\/\n\u2502   \u2502   \u251c\u2500\u2500 src\/\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 models\/\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 services\/\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 utils\/\n\u2502   \u2502   \u2514\u2500\u2500 tsconfig.json\n\u2502   \u251c\u2500\u2500 api\/\n\u2502   \u2502   \u251c\u2500\u2500 src\/\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 handlers\/\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 routes\/\n\u2502   \u2502   \u2514\u2500\u2500 tsconfig.json\n\u2502   \u251c\u2500\u2500 web\/\n\u2502   \u2502   \u251c\u2500\u2500 src\/\n\u2502   \u2502   \u2502   \u251c\u2500\u2500 components\/\n\u2502   \u2502   \u2502   \u2514\u2500\u2500 pages\/\n\u2502   \u2502   \u2514\u2500\u2500 tsconfig.json\n\u2502   \u2514\u2500\u2500 cli\/\n\u2502       \u251c\u2500\u2500 src\/\n\u2502       \u2514\u2500\u2500 tsconfig.json\n\u251c\u2500\u2500 tsconfig.json (base)\n\u251c\u2500\u2500 nx.json (\u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Nx)\n\u2514\u2500\u2500 pnpm-workspace.yaml\n<\/code><\/pre>\n\n\n\n<p><strong>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f Monorepo \u043d\u0430 Linux:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Nx:<\/strong>\u00a0\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f monorepos<\/li>\n\n\n\n<li><strong>PNPM:<\/strong>\u00a0package manager, \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f monorepos (\u0432\u043c\u0435\u0441\u0442\u043e npm)<\/li>\n\n\n\n<li><strong>Turbo:<\/strong>\u00a0build system \u0434\u043b\u044f monorepos<\/li>\n<\/ol>\n\n\n\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441 PNPM:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<code><em># \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 pnpm \u043d\u0430 Linux<\/em>\ncurl -fsSL https:\/\/get.pnpm.io\/install.sh | sh -\n\n<em># pnpm-workspace.yaml<\/em>\npackages:\n  - 'packages\/*'\n\n<em># \u0418\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0440\u0430\u0437\u043e\u043c<\/em>\npnpm install\n\n<em># \u0417\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u0430\u043a\u0435\u0442\u0430\u0445<\/em>\npnpm -r run build\n\n<em># \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434<\/em>\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">6.2 TypeScript path mapping \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432<\/h2>\n\n\n\n<p>\u0412\u043c\u0435\u0441\u0442\u043e&nbsp;<code>import { calculateStats } from '..\/..\/..\/core\/services\/portfolio';<\/code>&nbsp;\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c&nbsp;<code>import { calculateStats } from '@core\/services';<\/code><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">json<code><em>\/\/ tsconfig.json<\/em>\n{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@core\/*\": [\"packages\/core\/src\/*\"],\n      \"@api\/*\": [\"packages\/api\/src\/*\"],\n      \"@web\/*\": [\"packages\/web\/src\/*\"],\n      \"@cli\/*\": [\"packages\/cli\/src\/*\"],\n      \"@types\/*\": [\"packages\/core\/src\/types\/*\"]\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"7----linux--typescript--2025\">7. \u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u0434\u043b\u044f Linux-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 TypeScript \u0432 2025 \u0433\u043e\u0434\u0443<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00a0\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d Node.js 22+ \u0438\u043b\u0438 Bun \u0438\u043b\u0438 Deno 2<\/li>\n\n\n\n<li>\u00a0\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d VS Code \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438 (TypeScript, ESLint, Prettier, Copilot)<\/li>\n\n\n\n<li>\u00a0\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 (git)<\/li>\n\n\n\n<li>\u00a0\u0412\u044b\u0431\u0440\u0430\u043d package manager (npm, pnpm \u0438\u043b\u0438 bun)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00a0\u0421\u043e\u0437\u0434\u0430\u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0430\u043f\u043e\u043a<\/li>\n\n\n\n<li>\u00a0\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d TypeScript (tsconfig.json)<\/li>\n\n\n\n<li>\u00a0\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u044b ESLint \u0438 Prettier<\/li>\n\n\n\n<li>\u00a0\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b Husky pre-commit hooks<\/li>\n\n\n\n<li>\u00a0\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b npm scripts \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f IDE<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00a0\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438<\/li>\n\n\n\n<li>\u00a0\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/li>\n\n\n\n<li>\u00a0\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 ESLint<\/li>\n\n\n\n<li>\u00a0\u0410\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d GitHub Copilot<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00a0\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f type-driven development (\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0438\u043f\u044b, \u043f\u043e\u0442\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f)<\/li>\n\n\n\n<li>\u00a0\u0417\u0430\u043f\u0443\u0449\u0435\u043d watch mode (tsx watch \u0438\u043b\u0438 Vite)<\/li>\n\n\n\n<li>\u00a0\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0444\u043e\u043d\u043e\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432 (tsc &#8212;noEmit &#8212;watch)<\/li>\n\n\n\n<li>\u00a0\u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043a\u043e\u0434\u0430 \u0432 PR \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043b\u0438\u043d\u0442\u0435\u0440\u0430<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Deployment<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00a0\u0421\u043a\u0440\u0438\u043f\u0442 build \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 esbuild \u0438\u043b\u0438 swc \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/li>\n\n\n\n<li>\u00a0TypeScript \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0432 Docker \u043e\u0431\u0440\u0430\u0437<\/li>\n\n\n\n<li>\u00a0\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438 source maps \u0434\u043b\u044f production<\/li>\n\n\n\n<li>\u00a0\u041d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0442\u0438\u043f\u043e\u0432 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"8-------linux--2025\">8. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0442\u0435\u043a \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430 Linux \u0432 2025 \u0433\u043e\u0434\u0443<\/h2>\n\n\n\n<p><strong>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0441\u0442\u0435\u043a \u0434\u043b\u044f backend:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<code><em># Runtime \u0432\u044b\u0431\u043e\u0440<\/em>\n<em># Node.js 22+ \u0434\u043b\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438<\/em>\n<em># Deno 2 \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0431\u0435\u0437 npm \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439<\/em>\n<em># Bun \u0434\u043b\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0445 \u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/em>\n\n<em># \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c Node.js 22 \u043a\u0430\u043a \u0431\u0430\u043b\u0430\u043d\u0441 \u043c\u0435\u0436\u0434\u0443 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e<\/em>\ncurl https:\/\/deb.nodesource.com\/setup_22.x | sudo bash -\nsudo apt-get install -y nodejs\n\n<em># \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442<\/em>\nnpm create ts-fast@latest my-app\ncd my-app\n\n<em># \u0418\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0441 pnpm<\/em>\npnpm create ts-fast@latest my-app\n\n<em># \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c tsx \u0434\u043b\u044f development (\u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a)<\/em>\n<em># Copilot \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430<\/em>\n<em># ESLint + Prettier \u0434\u043b\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430<\/em>\n<em># Vitest \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/em>\n<em># esbuild \u0434\u043b\u044f production \u0441\u0431\u043e\u0440\u043a\u0438<\/em>\n<\/code><\/pre>\n\n\n\n<p><strong>\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0441\u0442\u0435\u043a \u0434\u043b\u044f fullstack:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bash<code><em># Frontend: Vite + React + TypeScript<\/em>\nnpm create vite@latest my-web -- --template react-ts\n\n<em># Backend: Node.js 22 + Express + TypeScript<\/em>\nnpm create ts-fast@latest my-api\n\n<em># Monorepo: Nx \u0438\u043b\u0438 Turbo<\/em>\nnpx create-nx-workspace@latest portfolio-app\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n\n\n\n<p>Linux \u0432 2025 \u0433\u043e\u0434\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430 TypeScript. \u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 TypeScript \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0432 Node.js 22+, Deno 2 \u0438 Bun, \u043f\u043b\u044e\u0441 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (Vite, esbuild, swc), \u043f\u043b\u044e\u0441 GitHub Copilot \u0441\u043e\u0437\u0434\u0430\u0435\u0442 unprecedented \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.<\/p>\n\n\n\n<p>\u0424\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u0430\u044f \u0432\u044b\u0433\u043e\u0434\u0430 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u0435\u043d\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (55% \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435), \u043d\u043e \u0438 \u0432 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u043e\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0434\u0430 (40% \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u0448\u0438\u0431\u043e\u043a), \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u043c onboarding \u043d\u043e\u0432\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u043b\u0443\u0447\u0448\u0435\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n\n\n\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0441 50 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438, \u043c\u0438\u0433\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u043d\u0430 Linux + TypeScript \u0441\u0442\u0435\u043a, \u0433\u043e\u0434\u043e\u0432\u0430\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0421\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438: $750 000<\/li>\n\n\n\n<li>\u0421\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u0435\u043d\u043d\u044b\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438: $300 000<\/li>\n\n\n\n<li>\u0421\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 production: $500 000<\/li>\n\n\n\n<li><strong>\u0418\u0442\u043e\u0433\u043e: $1.55 \u043c\u043b\u043d \u0432 \u0433\u043e\u0434<\/strong><\/li>\n<\/ul>\n\n\n\n<p>\u0418\u043d\u0432\u0435\u0441\u0442\u0438\u0446\u0438\u044f \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u043a\u0443\u043f\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435: \u041f\u043e\u0447\u0435\u043c\u0443 Linux \u0438\u0434\u0435\u0430\u043b\u0435\u043d \u0434\u043b\u044f TypeScript \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0412 2025 \u0433\u043e\u0434\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0432\u0441\u0435 \u0447\u0430\u0449\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 Linux \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 TypeScript. \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, 64% \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u043e\u0432, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u0441 TypeScript \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 Linux \u043b\u0438\u0431\u043e \u043a\u0430\u043a \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u041e\u0421, \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 WSL. \u042d\u0442\u043e \u043d\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u044c\u2014Linux \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"TypeScript \u043d\u0430 Linux","jetpack_seo_html_title":"TypeScript \u043d\u0430 Linux","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-2152","post","type-post","status-publish","format-standard","hentry","category-2"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/posts\/2152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2152"}],"version-history":[{"count":1,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/posts\/2152\/revisions"}],"predecessor-version":[{"id":2153,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/posts\/2152\/revisions\/2153"}],"wp:attachment":[{"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}