{"id":360746,"date":"2024-05-21T00:59:24","date_gmt":"2024-05-21T00:59:24","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=360746"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=360746","title":{"rendered":"<span>\u041d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b TypeScript \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439 \u0421\u0442\u0435\u043f\u0430\u043d\u043e\u0432, \u044f CTO \u0432\u043e fuse8. \u041c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u043a\u043e\u043b\u043b\u0435\u0433 \u043f\u043e \u0446\u0435\u0445\u0443 \u0438 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c. \u0412 \u0441\u0444\u0435\u0440\u0435 \u044f \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 20 \u043b\u0435\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 TypeScript, \u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044f\u043c\u0438 <\/em>\u2013<em> \u043e \u043d\u0438\u0445 \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c. \u041e\u0433\u0440\u043e\u043c\u043d\u0430\u044f \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0414\u043c\u0438\u0442\u0440\u0438\u044e \u0411\u0435\u0440\u0434\u043d\u0438\u043a\u043e\u0432\u0443 \u0438 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0443 \u0418\u043d\u043a\u0435\u0435\u0432\u0443!<\/em><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0438\u0442\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044e, \u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 <a href=\"https:\/\/www.typescriptlang.org\/play\">\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435<\/a>. \u041e\u043d \u0443\u0434\u043e\u0431\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044e TypeScript \u0432 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c.<\/p>\n<h3>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 any \u0432\u043c\u0435\u0441\u0442\u043e unknown<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0438\u043f any, \u0442\u043e \u0442\u0435\u0440\u044f\u0435\u043c \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e \u2014 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443 \u0438\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442 \u043d\u0430\u0441 \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c unknown, \u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043d\u0438\u0445.\u00a0<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 any \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e &#8212; \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0432\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432:<\/p>\n<pre><code class=\"typescript\">\/\/ JSON.parse const a = JSON.parse('{ a: 1 }'); \/\/ any   \/\/ Array.isArray function parse(a: unknown) {   if (Array.isArray(a)) {     console.log(a); \/\/ a[any]   } }   \/\/ fetch fetch(\"\/\")   .then((res) => res.json())   .then((json) => {     console.log(json); \/\/ any   });   \/\/ localStorage, sessionStorage const b = localStorage.a; \/\/ any const c = sessionStorage.b \/\/ any<\/code><\/pre>\n<p>\u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c <a href=\"https:\/\/github.com\/total-typescript\/ts-reset\"><u>ts-reset<\/u><\/a>.\u00a0<\/p>\n<p><a href=\"https:\/\/github.com\/total-typescript\/ts-reset\"><u>ts-reset<\/u><\/a> \u2013 \u044d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b TypeScript \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438\u043d\u0430\u0447\u0435.<\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 as const<\/h3>\n<p>\u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 has \u0443 Set \u0438 Map.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e as const, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 includes \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 4 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0438\u043f\u0435 userIds.<\/p>\n<pre><code class=\"typescript\">const userIds = [1, 2, 3] as const;  userIds.includes(4);<\/code><\/pre>\n<p>\u0418\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/total-typescript\/ts-reset\"><u>ts-reset<\/u><\/a>.<\/p>\n<h3>\u041e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0442 undefined<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c undefined. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u0438\u0445 undefined, \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432. \u041d\u043e \u043c\u0430\u0441\u0441\u0438\u0432 newArr \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0438\u043f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 number \u0438\u043b\u0438 undefined.<\/p>\n<pre><code class=\"typescript\">const arr = [1, 2, undefined]; const newArr = arr.filter((item) => item !== undefined);<\/code><\/pre>\n<p>\u0420\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0442\u043e\u0433\u0434\u0430 newArr2 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0442\u0438\u043f number:  <\/p>\n<pre><code class=\"typescript\">const newArr2 = arr.filter((item): item is number => item !== undefined);<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 <a href=\"https:\/\/github.com\/total-typescript\/ts-reset\"><u>ts-reset<\/u><\/a> \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f, \u043a\u043e\u0433\u0434\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 filter \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u043c BooleanConstructor.<\/p>\n<pre><code class=\"typescript\">const filteredArray = [1, 2, undefined].filter(Boolean)<\/code><\/pre>\n<h3>\u0421\u0443\u0436\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u043e\u0431\u043e\u0447\u043d\u043e\u0439 \u043d\u043e\u0442\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0442\u0438\u043f\u043e\u043c \u043a\u043b\u044e\u0447 \u0441\u0442\u0440\u043e\u043a\u0430, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a.\u00a0<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043a\u043e\u0431\u043e\u0447\u043d\u0443\u044e \u043d\u043e\u0442\u0430\u0446\u0438\u044e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0442\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439. \u0412 typescript \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0438\u0436\u0435 4.7 \u0442\u0438\u043f queryCountry \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0441\u0442\u0440\u043e\u043a, \u0442.\u0435. \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0443\u0436\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0445\u043e\u0442\u044f \u043c\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c.\u00a0<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c typescript \u0432\u0435\u0440\u0441\u0438\u0438 4.7 \u0438 \u0432\u044b\u0448\u0435, \u0441\u0443\u0436\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0430\u043a, \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c.<\/p>\n<pre><code class=\"typescript\">const query: Record&lt;string, string | string[]> = {};  const COUNTRY_KEY = 'country';  if (typeof query[COUNTRY_KEY] === 'string') {     const queryCountry: string = query[COUNTRY_KEY]; }<\/code><\/pre>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/release-notes\/typescript-4-7.html#control-flow-analysis-for-bracketed-element-access\"><u>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/u><\/a>.\u00a0<\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b enum<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c enum \u0438 \u044f\u0432\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e\u0433\u0434\u0430 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0431\u0443\u0434\u0443\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442 0 \u0438 \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e enum \u0437\u0430\u0442\u0438\u043f\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 showMessage, \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438, \u0447\u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043a\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 enum:<\/p>\n<pre><code class=\"typescript\">enum LogLevel {     Debug, \/\/ 0     Log, \/\/ 1     Warning, \/\/ 2     Error \/\/ 3 }  const showMessage = (logLevel: LogLevel, message: string) => {     \/\/ code... }  showMessage(0, 'debug message'); showMessage(2, 'warning message');<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435\u0441\u044f \u0432 enum \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 &#171;Argument of type &#8216;-100&#8217; is not assignable to parameter of type &#8216;LogLevel'&#187;.<\/p>\n<p>\u041d\u043e \u0432 typescript \u043d\u0438\u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 5.0 \u0442\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435\u0442, \u0445\u043e\u0442\u044f \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c:<\/p>\n<pre><code class=\"typescript\">showMessage(-100, 'any message')<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c enum \u0438 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0435 <strong>a<\/strong> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u0438\u043f enum \u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043b\u044e\u0431\u043e\u0435 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 enum, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1.\u00a0<\/p>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 TS \u043d\u0438\u0436\u0435 5 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<pre><code class=\"typescript\">enum SomeEvenDigit {     Zero = 0,     Two = 2,     Four = 4 }  const a: SomeEvenDigit = 1;<\/code><\/pre>\n<p>\u0418 \u0435\u0449\u0435 \u043c\u043e\u043c\u0435\u043d\u0442: \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 TypeScript \u043d\u0438\u0436\u0435 5 \u0432\u0435\u0440\u0441\u0438\u0438, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 enum.  <\/p>\n<pre><code class=\"typescript\">enum User {   name = 'name',     userName = `user${User.name}` }<\/code><\/pre>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/release-notes\/typescript-5-0.html#enum-overhaul\"><u>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/u><\/a>.<\/p>\n<h3>\u0424\u0443\u043d\u043a\u0446\u0438\u0438, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0442\u0438\u043f undefined, \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u044f\u0432\u043d\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0442<\/h3>\n<p>\u0412 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 TypeScript \u043d\u0438\u0436\u0435 5.1 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d \u0442\u0438\u043f undefined, \u043d\u043e \u043d\u0435\u0442 return.<\/p>\n<pre><code class=\"typescript\">function f4(): undefined {}<\/code><\/pre>\n<p>\u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445:  <\/p>\n<pre><code class=\"typescript\">function f1() {}  function f2(): void {}  function f3(): any {}<\/code><\/pre>\n<p>\u0417\u0430\u043a\u0440\u0435\u043f\u0438\u043c. \u0415\u0441\u043b\u0438 \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0438\u043f void \u0438\u043b\u0438 any, \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041e\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0438\u043f undefined, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 TypeScript \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0438\u0436\u0435 5.1.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/typescript\/announcing-typescript-5-1-rc\/#easier-implicit-returns-for-undefined-returning-functions\"><u>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/u><\/a>.<\/p>\n<h3>\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 enum\u2019\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u043e\u043c\u0438\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439<\/h3>\n<p>\u0418 \u044d\u0442\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0443 TypeScript \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c enum \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u0438\u043c enum. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430 \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 enum. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 showMessage \u0442\u0438\u043f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 &#8216;Debug&#8217; \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0438\u043f enum &#8216;LogLevel&#8217;.<\/p>\n<pre><code class=\"typescript\">enum LogLevel {     Debug = 'Debug',     Error = 'Error' }  const showMessage = (logLevel: LogLevel, message: string) => {     \/\/ code... }  showMessage('Debug', 'some text')<\/code><\/pre>\n<p>\u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 enum \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u044d\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.  <\/p>\n<pre><code class=\"typescript\">enum LogLevel2 {     Debug = 'Debug',     Error = 'Error' } showMessage(LogLevel2.Debug, 'some text')<\/code><\/pre>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u2013 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c as const.  <\/p>\n<pre><code class=\"typescript\">const LOG_LEVEL = {     DEBUG: 'debug',     ERROR: 'error' } as const  type ObjectValues&lt;T> = T[keyof T]  type LogLevel = ObjectValues&lt;typeof LOG_LEVEL>;  const logMessage = (logLevel: LogLevel, message: string) => {     \/\/ code... }<\/code><\/pre>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0432\u0435\u0434\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0438 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f.  <\/p>\n<pre><code class=\"typescript\">logMessage('debug', 'some text') logMessage(LOG_LEVEL.DEBUG, 'some text')<\/code><\/pre>\n<h3>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u043e\u0439<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0443, \u0435\u0441\u043b\u0438 2 \u0435\u0451 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0442\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043b\u0438 \u043d\u0430\u0448\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u044e\u0431\u043e\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0448\u0430\u0433\u0435 \u0431\u044b\u043b\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430.<\/p>\n<pre><code class=\"typescript\">function add(x: string, y: string): string function add(x: number, y: number): number function add(x: unknown, y: unknown): unknown {      if (typeof x === 'string' &amp;&amp; typeof y === 'string') {                 return 100;     }      if (typeof x === 'number' &amp;&amp; typeof y === 'number') {         return x + y     }      throw new Error('invalid arguments passed'); }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c, \u0447\u0442\u043e const \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0438\u043f string, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0438\u0441\u043b\u043e.  <\/p>\n<pre><code class=\"typescript\">const str = add(\"Hello\", \"World!\"); const num = add(10, 20);<\/code><\/pre>\n<h3>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c<\/h3>\n<p>\u0422\u0438\u043f\u0438\u0437\u0438\u0440\u0443\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0438\u043f\u0435 \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e. \u0412\u0435\u0434\u044c \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432 typescript \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e:<\/p>\n<pre><code class=\"typescript\">type Func = () => {   id: string; };  const func: Func = () => {   return {     id: \"123\",     name: \"Hello!\",   }; }; <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 formatAmountParams, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e formatAmount. \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.  <\/p>\n<pre><code class=\"typescript\">type FormatAmount = {   currencySymbol?: string,   value: number }  const formatAmount = ({ currencySymbol = '$', value }: FormatAmount) => {   return `${currencySymbol} ${value}`; }  const formatAmountParams = {   currencySymbol: 'USD',   value: 10,   anotherValue: 20 }<\/code><\/pre>\n<p>\u041d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430:  <\/p>\n<pre><code class=\"typescript\">formatAmount(formatAmountParams);<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443, \u0435\u0441\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c.  <\/p>\n<pre><code class=\"typescript\">formatAmount({ currencySymbol: '', value: 10, anotherValue: 12 });<\/code><\/pre>\n<p>\u041c\u043e\u0436\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c currencySymbol \u043d\u0430 currencySign.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0432 \u0442\u0438\u043f\u0435, \u0437\u0430\u0442\u0435\u043c typescript \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043b\u044e\u0447 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u0441\u00a0 currencySymbol \u043d\u0430 currencySign.<\/p>\n<pre><code class=\"typescript\">type FormatAmount = {   currencySign?: string,   value: number }  const formatAmount = ({ currencySign = '$', value }: FormatAmount) => {   return `${currencySign} ${value}`; }  const formatAmountParams = {   currencySymbol: 'USD',   value: 10 }  formatAmount(formatAmountParams);<\/code><\/pre>\n<p>\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442 \u2013 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u0440\u043e\u0448\u0435\u043b \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041d\u043e \u0432 formatAmountParams \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 currencySymbol \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 &#8216;USD 10&#8242; \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c $10&#8217;.<\/p>\n<h3>\u041f\u043e\u0442\u0435\u0440\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Object.keys<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442 obj. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Object.keys \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u043f\u0440\u043e\u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443. \u0415\u0441\u043b\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043f\u043e \u043a\u043b\u044e\u0447\u0443, typescript \u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0449\u0438\u0439 \u0442\u0438\u043f &#8216;string&#8217; \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 obj.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2013 \u0441\u043a\u0430\u0441\u0442\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 as. \u041d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c, \u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f. \u041d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b [key] \u0431\u044b\u043b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0430 \u043a\u043b\u044e\u0447\u043e\u043c, \u0438 \u044f\u0432\u043d\u043e \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c.<\/p>\n<pre><code class=\"typescript\">const obj = {a: 1, b: 2}  Object.keys(obj).forEach((key) => {   console.log(obj[key])   console.log(key as keyof typeof obj) });<\/code><\/pre>\n<h3>TypeScript \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0438\u043f UserMetadata, \u043a\u0430\u043a Map \u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u043c cache \u0438 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043b\u044e\u0447\u0443 &#8216;foo&#8217; \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 get. \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442 cacheCopy \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 cache. \u0418 \u0442\u0430\u043a\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 get. Typescript \u043d\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 get.<\/p>\n<pre><code class=\"typescript\">type Metadata = {};  type UserMetadata = Map&lt;string, Metadata>;  const cache: UserMetadata = new Map();  console.log(cache.get('foo'));  const cacheCopy: UserMetadata = { ...cache };  console.log(cacheCopy.get('foo'));<\/code><\/pre>\n<h3>\u041c\u0435\u0440\u0436 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432<\/h3>\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u0442\u0438\u043f\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u0440\u0436\u0438\u0442\u044c\u0441\u044f. \u0415\u0441\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438, \u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043c \u044d\u0442\u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437 \u0432\u0441\u0435\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438.<\/p>\n<pre><code class=\"typescript\">interface User {     id: number; }  interface User {     name: string; }  \/\/ Error: Property 'id' is missing in type '{ name: string; }' but required in type 'User', because User interfaces merged const user: User = {     name: 'bar', }<\/code><\/pre>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c typescript, \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u0441\u043c\u0435\u0440\u0436\u0430\u0442\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c comment, \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043c\u0435\u0440\u0436 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e comment \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 lib.dom.d.ts.  <\/p>\n<pre><code class=\"typescript\">interface Comment {   id: number;   text: string; }  \/\/ Error: Type '{ id: number; text: string; }' is missing the following properties from type 'Comment': data, length, ownerDocument, appendData, and 59 more. const comment: Comment = {   id: 5,   text: \"good video!\", };<\/code><\/pre>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/declaration-merging.html#merging-interfaces\"><u>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/u><\/a>.<\/p>\n<h3>\u0415\u0449\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0442\u0435\u043c\u0435, \u043d\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u043e\u043b\u0438\u043a\u043e\u0432 \u043d\u0430 youtube:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=I6V2FkW1ozQ\"><u>Be Careful With Return Types In TypeScript<\/u><\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=jEWLhZ3ZJzQ\"><u>\u0422\u041e\u041f 8 \u0432\u0435\u0449\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0435 \u043b\u044e\u0431\u043b\u044e \u0432 TypeScript<\/u><\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=jjMbPt_H3RQ\"><u>Enums considered harmful<\/u><\/a>.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/775330\/\"> https:\/\/habr.com\/ru\/articles\/775330\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439 \u0421\u0442\u0435\u043f\u0430\u043d\u043e\u0432, \u044f CTO \u0432\u043e fuse8. \u041c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043e\u043f\u044b\u0442\u043e\u043c \u043a\u043e\u043b\u043b\u0435\u0433 \u043f\u043e \u0446\u0435\u0445\u0443 \u0438 \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c. \u0412 \u0441\u0444\u0435\u0440\u0435 \u044f \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 20 \u043b\u0435\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f, \u0435\u0441\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 TypeScript, \u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044f\u043c\u0438 <\/em>\u2013<em> \u043e \u043d\u0438\u0445 \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c. \u041e\u0433\u0440\u043e\u043c\u043d\u0430\u044f \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u0414\u043c\u0438\u0442\u0440\u0438\u044e \u0411\u0435\u0440\u0434\u043d\u0438\u043a\u043e\u0432\u0443 \u0438 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0443 \u0418\u043d\u043a\u0435\u0435\u0432\u0443!<\/em><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0438\u0442\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044e, \u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432 <a href=\"https:\/\/www.typescriptlang.org\/play\">\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435<\/a>. \u041e\u043d \u0443\u0434\u043e\u0431\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u0435\u0440\u0441\u0438\u044e TypeScript \u0432 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c.<\/p>\n<h3>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 any \u0432\u043c\u0435\u0441\u0442\u043e unknown<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0438\u043f any, \u0442\u043e \u0442\u0435\u0440\u044f\u0435\u043c \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e \u2014 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443 \u0438\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442 \u043d\u0430\u0441 \u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u0445. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c unknown, \u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442 \u043e \u043d\u0438\u0445.\u00a0<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 any \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e &#8212; \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0432\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432:<\/p>\n<pre><code class=\"typescript\">\/\/ JSON.parse const a = JSON.parse('{ a: 1 }'); \/\/ any   \/\/ Array.isArray function parse(a: unknown) {   if (Array.isArray(a)) {     console.log(a); \/\/ a[any]   } }   \/\/ fetch fetch(\"\/\")   .then((res) => res.json())   .then((json) => {     console.log(json); \/\/ any   });   \/\/ localStorage, sessionStorage const b = localStorage.a; \/\/ any const c = sessionStorage.b \/\/ any<\/code><\/pre>\n<p>\u042d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c <a href=\"https:\/\/github.com\/total-typescript\/ts-reset\"><u>ts-reset<\/u><\/a>.\u00a0<\/p>\n<p><a href=\"https:\/\/github.com\/total-typescript\/ts-reset\"><u>ts-reset<\/u><\/a> \u2013 \u044d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b TypeScript \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0438\u043d\u0430\u0447\u0435.<\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 as const<\/h3>\n<p>\u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 has \u0443 Set \u0438 Map.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e as const, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 includes \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 4 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0438\u043f\u0435 userIds.<\/p>\n<pre><code class=\"typescript\">const userIds = [1, 2, 3] as const;  userIds.includes(4);<\/code><\/pre>\n<p>\u0418\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/github.com\/total-typescript\/ts-reset\"><u>ts-reset<\/u><\/a>.<\/p>\n<h3>\u041e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0442 undefined<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c undefined. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u0438\u0445 undefined, \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432. \u041d\u043e \u043c\u0430\u0441\u0441\u0438\u0432 newArr \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0438\u043f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 number \u0438\u043b\u0438 undefined.<\/p>\n<pre><code class=\"typescript\">const arr = [1, 2, undefined]; const newArr = arr.filter((item) => item !== undefined);<\/code><\/pre>\n<p>\u0420\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0442\u043e\u0433\u0434\u0430 newArr2 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0442\u0438\u043f number:  <\/p>\n<pre><code class=\"typescript\">const newArr2 = arr.filter((item): item is number => item !== undefined);<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 <a href=\"https:\/\/github.com\/total-typescript\/ts-reset\"><u>ts-reset<\/u><\/a> \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043c\u043e\u0447\u044c, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u044f, \u043a\u043e\u0433\u0434\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 filter \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u043c BooleanConstructor.<\/p>\n<pre><code class=\"typescript\">const filteredArray = [1, 2, undefined].filter(Boolean)<\/code><\/pre>\n<h3>\u0421\u0443\u0436\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u043e\u0431\u043e\u0447\u043d\u043e\u0439 \u043d\u043e\u0442\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u0442\u0438\u043f\u043e\u043c \u043a\u043b\u044e\u0447 \u0441\u0442\u0440\u043e\u043a\u0430, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a.\u00a0<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043a\u043e\u0431\u043e\u0447\u043d\u0443\u044e \u043d\u043e\u0442\u0430\u0446\u0438\u044e \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0442\u0438\u043f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439. \u0412 typescript \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0438\u0436\u0435 4.7 \u0442\u0438\u043f queryCountry \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0441\u0442\u0440\u043e\u043a, \u0442.\u0435. \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0443\u0436\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0445\u043e\u0442\u044f \u043c\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c.\u00a0<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c typescript \u0432\u0435\u0440\u0441\u0438\u0438 4.7 \u0438 \u0432\u044b\u0448\u0435, \u0441\u0443\u0436\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0430\u043a, \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c.<\/p>\n<pre><code class=\"typescript\">const query: Record&lt;string, string | string[]> = {};  const COUNTRY_KEY = 'country';  if (typeof query[COUNTRY_KEY] === 'string') {     const queryCountry: string = query[COUNTRY_KEY]; }<\/code><\/pre>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/release-notes\/typescript-4-7.html#control-flow-analysis-for-bracketed-element-access\"><u>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/u><\/a>.\u00a0<\/p>\n<h3>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b enum<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c enum \u0438 \u044f\u0432\u043d\u043e \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e\u0433\u0434\u0430 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0431\u0443\u0434\u0443\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442 0 \u0438 \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e enum \u0437\u0430\u0442\u0438\u043f\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 showMessage, \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438, \u0447\u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u043a\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 enum:<\/p>\n<pre><code class=\"typescript\">enum LogLevel {     Debug, \/\/ 0     Log, \/\/ 1     Warning, \/\/ 2     Error \/\/ 3 }  const showMessage = (logLevel: LogLevel, message: string) => {     \/\/ code... }  showMessage(0, 'debug message'); showMessage(2, 'warning message');<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435\u0441\u044f \u0432 enum \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443 &#171;Argument of type &#8216;-100&#8217; is not assignable to parameter of type &#8216;LogLevel'&#187;.<\/p>\n<p>\u041d\u043e \u0432 typescript \u043d\u0438\u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 5.0 \u0442\u0430\u043a\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435\u0442, \u0445\u043e\u0442\u044f \u043f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c:<\/p>\n<pre><code class=\"typescript\">showMessage(-100, 'any message')<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c enum \u0438 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0435 <strong>a<\/strong> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u0438\u043f enum \u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043b\u044e\u0431\u043e\u0435 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0442 \u0432 enum, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1.\u00a0<\/p>\n<p>\u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 TS \u043d\u0438\u0436\u0435 5 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<pre><code class=\"typescript\">enum SomeEvenDigit {     Zero = 0,     Two = 2,     Four = 4 }  const a: SomeEvenDigit = 1;<\/code><\/pre>\n<p>\u0418 \u0435\u0449\u0435 \u043c\u043e\u043c\u0435\u043d\u0442: \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 TypeScript \u043d\u0438\u0436\u0435 5 \u0432\u0435\u0440\u0441\u0438\u0438, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 enum.  <\/p>\n<pre><code class=\"typescript\">enum User {   name = 'name',     userName = `user${User.name}` }<\/code><\/pre>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/release-notes\/typescript-5-0.html#enum-overhaul\"><u>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/u><\/a>.<\/p>\n<h3>\u0424\u0443\u043d\u043a\u0446\u0438\u0438, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0442\u0438\u043f undefined, \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u044f\u0432\u043d\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0442<\/h3>\n<p>\u0412 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 TypeScript \u043d\u0438\u0436\u0435 5.1 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d \u0442\u0438\u043f undefined, \u043d\u043e \u043d\u0435\u0442 return.<\/p>\n<pre><code class=\"typescript\">function f4(): undefined {}<\/code><\/pre>\n<p>\u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445:  <\/p>\n<pre><code class=\"typescript\">function f1() {}  function f2(): void {}  function f3(): any {}<\/code><\/pre>\n<p>\u0417\u0430\u043a\u0440\u0435\u043f\u0438\u043c. \u0415\u0441\u043b\u0438 \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0438\u043f void \u0438\u043b\u0438 any, \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u041e\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0438\u043f undefined, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 TypeScript \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0438\u0436\u0435 5.1.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/typescript\/announcing-typescript-5-1-rc\/#easier-implicit-returns-for-undefined-returning-functions\"><u>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/u><\/a>.<\/p>\n<h3>\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 enum\u2019\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u043e\u043c\u0438\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439<\/h3>\n<p>\u0418 \u044d\u0442\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0443 TypeScript \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c enum \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u0438\u043c enum. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430 \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 enum. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 showMessage \u0442\u0438\u043f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 &#8216;Debug&#8217; \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u0438\u043f enum &#8216;LogLevel&#8217;.<\/p>\n<pre><code class=\"typescript\">enum LogLevel {     Debug = 'Debug',     Error = 'Error' }  const showMessage = (logLevel: LogLevel, message: string) => {     \/\/ code... }  showMessage('Debug', 'some text')<\/code><\/pre>\n<p>\u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 enum \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u044d\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.  <\/p>\n<pre><code class=\"typescript\">enum LogLevel2 {     Debug = 'Debug',     Error = 'Error' } showMessage(LogLevel2.Debug, 'some text')<\/code><\/pre>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u2013 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c as const.  <\/p>\n<pre><code class=\"typescript\">const LOG_LEVEL = {     DEBUG: 'debug',     ERROR: 'error' } as const  type ObjectValues&lt;T> = T[keyof T]  type LogLevel = ObjectValues&lt;typeof LOG_LEVEL>;  const logMessage = (logLevel: LogLevel, message: string) => {     \/\/ code... }<\/code><\/pre>\n<p>\u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e, \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0432\u0435\u0434\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0438 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f.  <\/p>\n<pre><code class=\"typescript\">logMessage('debug', 'some text') logMessage(LOG_LEVEL.DEBUG, 'some text')<\/code><\/pre>\n<h3>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u043e\u0439<\/h3>\n<p>\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0443, \u0435\u0441\u043b\u0438 2 \u0435\u0451 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438. \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0442\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043b\u0438 \u043d\u0430\u0448\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u044e\u0431\u043e\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0448\u0430\u0433\u0435 \u0431\u044b\u043b\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430.<\/p>\n<pre><code class=\"typescript\">function add(x: string, y: string): string function add(x: number, y: number): number function add(x: unknown, y: unknown): unknown {      if (typeof x === 'string' &amp;&amp; typeof y === 'string') {                 return 100;     }      if (typeof x === 'number' &amp;&amp; typeof y === 'number') {         return x + y     }      throw new Error('invalid arguments passed'); }<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c, \u0447\u0442\u043e const \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u0438\u043f string, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0438\u0441\u043b\u043e.  <\/p>\n<pre><code class=\"typescript\">const str = add(\"Hello\", \"World!\"); const num = add(10, 20);<\/code><\/pre>\n<h3>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c<\/h3>\n<p>\u0422\u0438\u043f\u0438\u0437\u0438\u0440\u0443\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0438\u043f\u0435 \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e. \u0412\u0435\u0434\u044c \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432 typescript \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u043e:<\/p>\n<pre><code class=\"typescript\">type Func = () => {   id: string; };  const func: Func = () => {   return {     id: \"123\",     name: \"Hello!\",   }; }; <\/code><\/pre>\n<p>\u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 formatAmountParams, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e formatAmount. \u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.  <\/p>\n<pre><code class=\"typescript\">type FormatAmount = {   currencySymbol?: string,   value: number }  const formatAmount = ({ currencySymbol = '$', value }: FormatAmount) => {   return `${currencySymbol} ${value}`; }  const formatAmountParams = {   currencySymbol: 'USD',   value: 10,   anotherValue: 20 }<\/code><\/pre>\n<p>\u041d\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438\u0448\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430:  <\/p>\n<pre><code class=\"typescript\">formatAmount(formatAmountParams);<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443, \u0435\u0441\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c.  <\/p>\n<pre><code class=\"typescript\">formatAmount({ currencySymbol: '', value: 10, anotherValue: 12 });<\/code><\/pre>\n<p>\u041c\u043e\u0436\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c currencySymbol \u043d\u0430 currencySign.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0432 \u0442\u0438\u043f\u0435, \u0437\u0430\u0442\u0435\u043c typescript \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043b\u044e\u0447 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u0441\u00a0 currencySymbol \u043d\u0430 currencySign.<\/p>\n<pre><code class=\"typescript\">type FormatAmount = {   currencySign?: string,   value: number }  const formatAmount = ({ currencySign = '$', value }: FormatAmount) => {   return `${currencySign} ${value}`; }  const formatAmountParams = {   currencySymbol: 'USD',   value: 10 }  formatAmount(formatAmountParams);<\/code><\/pre>\n<p>\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442 \u2013 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u0440\u043e\u0448\u0435\u043b \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041d\u043e \u0432 formatAmountParams \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 currencySymbol \u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 &#8216;USD 10&#8242; \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c $10&#8217;.<\/p>\n<h3>\u041f\u043e\u0442\u0435\u0440\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Object.keys<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442 obj. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Object.keys \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u043f\u0440\u043e\u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443. \u0415\u0441\u043b\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u043f\u043e \u043a\u043b\u044e\u0447\u0443, typescript \u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0449\u0438\u0439 \u0442\u0438\u043f &#8216;string&#8217; \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0430 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 obj.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2013 \u0441\u043a\u0430\u0441\u0442\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 as. \u041d\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c, \u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f. \u041d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b [key] \u0431\u044b\u043b \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0430 \u043a\u043b\u044e\u0447\u043e\u043c, \u0438 \u044f\u0432\u043d\u043e \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c.<\/p>\n<pre><code class=\"typescript\">const obj = {a: 1, b: 2}  Object.keys(obj).forEach((key) => {   console.log(obj[key])   console.log(key as keyof typeof obj) });<\/code><\/pre>\n<h3>TypeScript \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0438\u043f UserMetadata, \u043a\u0430\u043a Map \u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-360746","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/360746","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=360746"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/360746\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=360746"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=360746"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=360746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}