{"id":486302,"date":"2026-07-06T08:44:47","date_gmt":"2026-07-06T08:44:47","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=486302"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=486302","title":{"rendered":"\u0422\u043e\u0447\u043d\u043e \u043b\u0438 \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u0435\u043d `any`? 13 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0438\u0437 TypeScript-\u043a\u043e\u0434-\u0440\u0435\u0432\u044c\u044e \u2014 \u043e\u0442 `unknown` \u0434\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/b7\/88\/e3\/b788e3332e14893832768b1fcc4e9683.png\" alt=\"any, as \u0438 ! \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0438\u043f\u043e\u0432; unknown \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/b7\/88\/e3\/b788e3332e14893832768b1fcc4e9683.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/b7\/88\/e3\/b788e3332e14893832768b1fcc4e9683.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>any, as \u0438 ! \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0438\u043f\u043e\u0432; unknown \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/figcaption><\/div>\n<\/figure>\n<p><em>any, as \u0438 ! \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435: \u044f \u0437\u043d\u0430\u044e \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e?<\/em> <\/p>\n<blockquote>\n<p>\u042d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0446\u0438\u043a\u043b\u0430 \u043e TypeScript \u0438 React \u0433\u043b\u0430\u0437\u0430\u043c\u0438 code review. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u2014 <a href=\"https:\/\/habr.com\/ru\/articles\/1055486\/\" rel=\"noopener noreferrer nofollow\">\u00ab\u041d\u0443\u0436\u0435\u043d \u043b\u0438 \u0437\u0434\u0435\u0441\u044c <code>useEffect<\/code>? 12 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0438\u0437 React-\u043a\u043e\u0434-\u0440\u0435\u0432\u044c\u044e \u2014 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e React 19.2\u00bb<\/a>.<\/p>\n<\/blockquote>\n<p>\u041a\u0440\u0430\u0441\u043d\u0430\u044f \u0432\u043e\u043b\u043d\u0438\u0441\u0442\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u043f\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0435\u0442, \u0438 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0435\u0451 \u0443\u0431\u0440\u0430\u0442\u044c \u2014 \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c <code>any<\/code>, <code>as<\/code> \u0438\u043b\u0438 <code>!<\/code>. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0430\u043c\u043e\u043b\u043a\u0430\u0435\u0442, \u0441\u0431\u043e\u0440\u043a\u0430 \u0437\u0435\u043b\u0435\u043d\u0435\u0435\u0442, PR \u0443\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u0448\u0435. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0441\u044c: \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0430 \u0438\u0437 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c, \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/p>\n<p>\u0417\u0430 \u0433\u043e\u0434\u044b \u0440\u0435\u0432\u044c\u044e \u2014 \u0447\u0443\u0436\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u2014 \u044f \u043f\u0440\u0438\u0432\u044b\u043a \u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u0438 \u0442\u0440\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043a\u0430\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0443. \u041e\u043d\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u043c\u0435\u0447\u0430\u044e\u0442 \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0442\u0438\u043f \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d, \u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0439 \u0438 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0447\u0430\u0449\u0435 \u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441, \u0441\u0447\u0451\u0442 \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0437\u0436\u0435 \u0438 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 code review \u044f \u0437\u0430\u0434\u0430\u044e \u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0435 \u00ab\u043a\u0430\u043a \u0437\u0430\u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b TypeScript \u0437\u0430\u043c\u043e\u043b\u0447\u0430\u043b\u00bb, \u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441:<\/p>\n<blockquote>\n<p><strong>\u0427\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044f \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e \u2014 \u0438 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f?<\/strong><\/p>\n<\/blockquote>\n<p>\u0412\u0435\u0434\u0443 frontend-\u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0432\u043e\u0436\u0443 \u0432 \u0447\u0443\u0436\u0438\u0445 \u0434\u0438\u0444\u0444\u0430\u0445, \u0438 \u043f\u0440\u043e <code>any<\/code>, <code>as<\/code> \u0438 <code>!<\/code> \u0443 \u043d\u0430\u0441 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u043b\u043e\u0436\u0438\u043b\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0432\u043e\u0434 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0451\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f review. \u0418\u0437 \u043d\u0435\u0433\u043e \u0438 \u0432\u044b\u0440\u043e\u0441\u043b\u0430 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f: 13 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430 \u00ab\u043f\u043b\u043e\u0445\u043e \u2192 \u0445\u043e\u0440\u043e\u0448\u043e\u00bb \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 TypeScript 6 \u2014 \u0432\u0441\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0432 playground (\u043e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 React, \u043d\u043e \u0441\u0430\u043c\u0438 \u043f\u0440\u0438\u0451\u043c\u044b \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a TypeScript \u0432 \u0446\u0435\u043b\u043e\u043c). \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c <code>any<\/code> \u0438 <code>unknown<\/code>, \u0441\u0443\u0436\u0435\u043d\u0438\u0435 \u0438 type guards, <code>satisfies<\/code>, <code>as const<\/code>, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>!<\/code> \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c:<\/p>\n<blockquote>\n<p><strong>\u0422\u0438\u043f\u044b \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u044f \u043e \u0434\u0430\u043d\u043d\u044b\u0445. any, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 as T \u0438 !, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0431\u0435\u0437 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430. \u0415\u0441\u043b\u0438 \u0442\u0438\u043f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u2014 \u044d\u0442\u043e <\/strong><code><strong>unknown<\/strong><\/code><strong> \u0438 \u0441\u0443\u0436\u0435\u043d\u0438\u0435; \u0435\u0441\u043b\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d, \u043d\u043e \u043d\u0435\u0432\u0438\u0434\u0435\u043d \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u2014 \u044d\u0442\u043e guard, \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0430 \u043d\u0435 \u0441\u043b\u0435\u043f\u043e\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435.<\/strong><\/p>\n<\/blockquote>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430, \u0435\u0441\u043b\u0438 \u0432\u044b:<\/p>\n<ul>\n<li>\n<p>\u043f\u0438\u0448\u0435\u0442\u0435 \u043d\u0430 TypeScript \u0432 <code>strict<\/code>-\u0440\u0435\u0436\u0438\u043c\u0435;<\/p>\n<\/li>\n<li>\n<p>\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u0438\u0434\u0438\u0442\u0435 <code>any<\/code>, <code>as<\/code> \u0438 <code>!<\/code> \u043d\u0430 review;<\/p>\n<\/li>\n<li>\n<p>\u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043a\u043e\u0433\u0434\u0430 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0435 \u0441\u043b\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 API \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<\/li>\n<\/ul>\n<blockquote>\n<p>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 TypeScript Handbook (\u0440\u0430\u0437\u0434\u0435\u043b\u044b Everyday Types, Narrowing, \u0430 \u0442\u0430\u043a\u0436\u0435 <code>unknown<\/code> \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>satisfies<\/code>). \u0417\u0434\u0435\u0441\u044c \u044f \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u0437 code review, \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u043c \u0447\u0435\u043a-\u043b\u0438\u0441\u0442\u043e\u043c, \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 TypeScript 6 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u043c playground.<\/p>\n<\/blockquote>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u0432\u0435\u0440\u0441\u0438\u044f\u043c: \u0432 TS 6 <code>strict<\/code> \u0441\u0442\u0430\u043b \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u043c \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439, \u0430 <code>useUnknownInCatchVariables<\/code> \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e <code>strict<\/code> \u0435\u0449\u0451 \u0441 TS 4.4. TypeScript 7 \u0443\u0436\u0435 \u0431\u043b\u0438\u0437\u043a\u043e \u0438 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u043d\u043e\u0432\u043e\u0439 Go-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043d\u043e \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c <code>any<\/code> \/ <code>unknown<\/code> \/ <code>as<\/code> \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0421\u0442\u0440\u043e\u0433\u0438\u0439 <code>tsconfig<\/code>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0431\u0440\u0430\u043d \u0438 \u0441\u0430\u043c playground:<\/p>\n<pre><code class=\"json\">{  \"compilerOptions\": {    \"strict\": true,    \"useUnknownInCatchVariables\": true,    \"noUncheckedIndexedAccess\": true,    \"exactOptionalPropertyTypes\": true  }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>strict<\/code> \u2014 \u0431\u0430\u0437\u0430, <code>useUnknownInCatchVariables<\/code> \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c. <code>noUncheckedIndexedAccess<\/code> (\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <code>undefined<\/code> \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443) \u0438 <code>exactOptionalPropertyTypes<\/code> \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u0438 \u0441\u0442\u0440\u043e\u0433\u043e\u0441\u0442\u0438: \u0432 \u0437\u0440\u0435\u043b\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442 \u0441\u0440\u0430\u0437\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u0445 \u0441\u0442\u043e\u0438\u0442 \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e.<\/p>\n<h3>\u041a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u00ab\u0437\u0430\u0433\u043b\u0443\u0448\u0438\u0442\u044c\u00bb \u0442\u0438\u043f, \u044f \u0437\u0430\u0434\u0430\u044e \u0442\u0440\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430.<\/p>\n<ol>\n<li>\n<p><strong>\u042f \u0437\u043d\u0430\u044e \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u043e\u0433\u0443 \u0435\u0451 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u2014 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e?<\/strong> \u041c\u043e\u0433\u0443 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u2014 \u0441\u0443\u0436\u0430\u044e (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0438\u043b\u0438 guard\u2019\u043e\u043c). \u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e \u0431\u0435\u0437 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u2014 \u043f\u0435\u0440\u0435\u043d\u043e\u0448\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0442\u043a\u0443\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435?<\/strong> \u0415\u0441\u043b\u0438 \u0438\u0437\u0432\u043d\u0435 (\u0441\u0435\u0442\u044c, <code>JSON.parse<\/code>, <code>localStorage<\/code>, <code>postMessage<\/code>, <code>catch<\/code>) \u2014 \u0438\u0445 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0442\u0438\u043f <code>unknown<\/code>, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u042f \u0433\u0430\u0448\u0443 \u043e\u0448\u0438\u0431\u043a\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e, \u2014 \u0438\u043b\u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0443 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f?<\/strong> \u041f\u0435\u0440\u0432\u043e\u0435 \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043e \u0438 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c. \u0412\u0442\u043e\u0440\u043e\u0435 \u2014 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u0433 \u0441 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0441\u0440\u043e\u043a\u043e\u043c.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9b\/72\/1b\/9b721b353f4c570420ea740c9715a897.png\" alt=\"\u0422\u0440\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u043f\u0435\u0440\u0435\u0434 any, as \u0438 !: \u0437\u043d\u0430\u044e \u043b\u0438 \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u0448\u043b\u0438 \u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u0432\u043d\u0435, \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043b\u0438 \u0442\u0438\u043f.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/9b\/72\/1b\/9b721b353f4c570420ea740c9715a897.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/9b\/72\/1b\/9b721b353f4c570420ea740c9715a897.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0422\u0440\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u043f\u0435\u0440\u0435\u0434 any, as \u0438 !: \u0437\u043d\u0430\u044e \u043b\u0438 \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u0448\u043b\u0438 \u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u0432\u043d\u0435, \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043b\u0438 \u0442\u0438\u043f.<\/figcaption><\/div>\n<\/figure>\n<p><em>\u041f\u0435\u0440\u0435\u0434 <\/em><code><em>any<\/em><\/code><em>, <\/em><code><em>as<\/em><\/code><em> \u0438 <\/em><code><em>!<\/em><\/code><em> \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443: \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0442\u0438\u043f, \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/em> <\/p>\n<p>\u0412\u0441\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043d\u0438\u0436\u0435 \u2014 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u044d\u0442\u0438 \u0442\u0440\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430.<\/p>\n<h3>\u0413\u0434\u0435 TypeScript \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0437\u0430\u0449\u0438\u0449\u0430\u0442\u044c<\/h3>\n<p>\u041e\u0434\u0438\u043d \u0431\u0430\u0433 \u044f \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b \u043d\u0430\u0434\u043e\u043b\u0433\u043e. \u0423\u0442\u0440\u043e\u043c \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 \u043e\u0442\u0447\u0451\u0442: \u0443 \u0447\u0430\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u043b\u044b\u043c \u044d\u043a\u0440\u0430\u043d\u043e\u043c. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u044e \u043a\u043e\u0434 \u2014 \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0433\u043e\u0434\u0430\u043c\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 review \u0431\u0435\u0437 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432. \u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0438\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 (\u044f \u0441\u0432\u0451\u043b \u0432 \u043e\u0434\u0438\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432), \u043d\u043e \u0443\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u044b\u0439:<\/p>\n<pre><code>type UserDto = {  profile?: { fullName: string };  metrics: unknown;};const user = (await res.json()) as UserDto; \/\/ \u0444\u043e\u0440\u043c\u0443 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043bconst name = user.profile!.fullName;        \/\/ profile \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u2014 ! \u044d\u0442\u043e \u0433\u043b\u0443\u0448\u0438\u0442const rating: any = user.metrics;           \/\/ metrics \u0431\u044b\u043b unknown, \u0430 \u043c\u044b \u0432\u0435\u0440\u043d\u0443\u043b\u0438 anyrenderProfile(name, rating.score * 10);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u0431\u043e\u0440\u043a\u0430 \u0431\u044b\u043b\u0430 \u0437\u0435\u043b\u0451\u043d\u043e\u0439, \u0442\u0438\u043f\u044b \u00ab\u0441\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c\u00bb, \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u2014 \u0440\u043e\u0432\u043d\u043e \u0434\u043e \u0434\u043d\u044f, \u043a\u043e\u0433\u0434\u0430 \u0431\u044d\u043a\u0435\u043d\u0434 \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c <code>profile: null<\/code> \u0434\u043b\u044f \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0431\u0435\u0437 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u0430\u043d\u043a\u0435\u0442\u044b. \u0421\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432\u043d\u0435\u0441\u043b\u0430 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430: <code>as UserDto<\/code> \u0432\u043f\u0443\u0441\u0442\u0438\u043b \u043e\u0442\u0432\u0435\u0442 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0444\u043e\u0440\u043c\u044b \u2014 \u0430 <code>profile: null<\/code> \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u0436\u0435 \u043f\u043e\u0434 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 <code>profile?: {...}<\/code>; <code>profile!<\/code> \u0437\u0430\u0433\u043b\u0443\u0448\u0438\u043b \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u0440\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c; \u0438 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c <code>null<\/code> \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a <code>.fullName<\/code> \u0443\u0440\u043e\u043d\u0438\u043b\u043e \u0440\u0435\u043d\u0434\u0435\u0440. \u041f\u043e\u043b\u0435 <code>metrics<\/code> \u0431\u044d\u043a\u0435\u043d\u0434-\u0442\u0438\u043f \u043e\u0431\u044a\u044f\u0432\u0438\u043b \u043a\u0430\u043a <code>unknown<\/code>, \u043d\u043e <code>: any<\/code> \u0432\u0435\u0440\u043d\u0443\u043b \u0432\u0441\u0451 \u043d\u0430\u0437\u0430\u0434 \u2014 <code>rating.score<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u0436\u0434\u0430\u043b \u0441\u0432\u043e\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<p>\u041d\u0430 review \u043c\u044b \u043d\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u044d\u0442\u0438 \u0442\u0440\u0438 \u043c\u0435\u0441\u0442\u0430 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b:<\/p>\n<ul>\n<li>\n<p><code>as UserDto<\/code> \u2014 \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u0444\u043e\u0440\u043c\u0443: <code>profile: null<\/code> \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0430\u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443;<\/p>\n<\/li>\n<li>\n<p><code>profile!<\/code> \u2014 \u0442\u0438\u043f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e <code>profile<\/code> \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d; <code>!<\/code> \u0433\u043b\u0443\u0448\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><code>metrics: any<\/code> \u2014 \u043f\u043e\u043b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043e \u043a\u0430\u043a <code>unknown<\/code>, \u043d\u043e <code>: any<\/code> \u0441\u043d\u043e\u0432\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438; \u043d\u0443\u0436\u043d\u043e \u0441\u0443\u0437\u0438\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043a\u0430\u043a \u0443\u0431\u0440\u0430\u0442\u044c \u0442\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0438\u043f\u043e\u0432?\u00bb \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c?\u00bb. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u043d\u0430\u0432\u044b\u043a \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b: \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0442\u044c <code>any<\/code>, \u0430 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0434 \u043d\u0435\u0451.<\/p>\n<hr\/>\n<h2>\u0427\u0430\u0441\u0442\u044c I. any \u2014 \u044d\u0442\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0430 \u043d\u0435 \u0442\u0438\u043f<\/h2>\n<h3>01. any \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/h3>\n<p><code>any<\/code> \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u043f\u043e\u0447\u0442\u0438 \u0441 \u043b\u044e\u0431\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b (\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 <code>never<\/code>), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.<\/p>\n<pre><code>\/\/ \u274c any \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u043e\u043b\u044f\u043cconst user: any = await res.json();const age = user.profile.age; \/\/ \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f; \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u2014 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u0435 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0430 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. <code>any<\/code> \u2014 \u044d\u0442\u043e \u043d\u0435 \u00ab\u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u043d\u0430\u044e\u00bb, \u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0430\u044f \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430.<\/p>\n<pre><code>\/\/ \u2705 unknown \u043e\u0431\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0434\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u043e\u043b\u044f\u043cconst raw: unknown = await res.json();const user = parseUser(raw); \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u0432\u0435\u0440\u043d\u0451\u0442 User \u0438\u043b\u0438 \u0431\u0440\u043e\u0441\u0438\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438:<\/strong> \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u0435. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0436\u0438\u0442\u044c \u0434\u043e\u043b\u044c\u0448\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 <code>unknown<\/code> \u0438 \u0441\u0443\u0436\u0435\u043d\u0438\u0435. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/01-any-disables\" rel=\"noopener noreferrer nofollow\">Demo 01<\/a>.<\/p>\n<h3>02. any \u0437\u0430\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u0435\u043d<\/h3>\n<p><code>any<\/code> \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f: \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c, \u0432\u044b\u0437\u043e\u0432\u044b \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0434 \u043d\u0438\u043c \u0441\u043d\u043e\u0432\u0430 \u0434\u0430\u044e\u0442 <code>any<\/code> (\u0430 \u0432\u043e\u0442, \u0441\u043a\u0430\u0436\u0435\u043c, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 <code>typeof<\/code> \u2014 \u0443\u0436\u0435 \u043d\u0435\u0442).<\/p>\n<pre><code>\/\/ \u274c \u043e\u0448\u0438\u0431\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0437\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435const data: any = await res.json();const total = data.profile.age + data.bonus; \/\/ bonus \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u2192 NaN, \u0438 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 any<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0432 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u043c\u043e\u043b\u0447\u0430, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u0441\u043d\u043e\u0432\u0430 <code>any<\/code>, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u0435\u0437\u0434\u0435, \u043a\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u043b\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0414\u0430\u0436\u0435 \u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0438\u0445\u0438\u0439 <code>NaN<\/code>.<\/p>\n<pre><code>\/\/ \u2705 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \u043d\u0435 \u0434\u0430\u0451\u0442 \u043e\u0448\u0438\u0431\u043a\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044fconst user = parseUser(raw);const total = user.profile.age + user.bonus;\/\/                                    ~~~~~\/\/ \u041e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438: \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 'bonus' \u043d\u0435\u0442 \u0443 \u0442\u0438\u043f\u0430 'User'.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c <code>any<\/code> \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u0430 \u043c\u0435\u0448\u0430\u0435\u0442: \u00ab\u0437\u0430\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u00bb \u2014 \u0435\u0433\u043e \u0446\u0435\u043d\u0430, \u0430 \u043d\u0435 \u0444\u0438\u0447\u0430. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/02-any-viral\" rel=\"noopener noreferrer nofollow\">Demo 02<\/a>.<\/p>\n<h3>03. unknown \u0432\u043c\u0435\u0441\u0442\u043e any<\/h3>\n<p><code>any<\/code> \u0438 <code>unknown<\/code> \u043e\u0431\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043b\u044e\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e <code>unknown<\/code> \u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u0442\u0438\u043f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d\u00bb \u2014 <code>any<\/code> \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0449\u0451 \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<pre><code>\/\/ \u274c any \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043econst value: any = source();value.toUpperCase(); \/\/ \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043e\u0432\u043e\u043b\u0435\u043d, \u043d\u043e \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u0430 \u0438\u043b\u0438 null \u044d\u0442\u043e TypeError<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\/\/ \u2705 unknown \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u0441\u0443\u0436\u0435\u043d\u0438\u044fconst value: unknown = source();\/\/ value.toUpperCase();            \/\/ \u041e\u0448\u0438\u0431\u043a\u0430: 'value' is of type 'unknown'.if (typeof value === \"string\") {    value.toUpperCase(); \/\/ \u0437\u0434\u0435\u0441\u044c value \u0441\u0443\u0436\u0435\u043d \u0434\u043e string}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e: \u0435\u0441\u043b\u0438 \u0442\u044f\u043d\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>any<\/code>, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u0435\u043d <code>unknown<\/code> \u043f\u043b\u044e\u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/03-unknown-instead\" rel=\"noopener noreferrer nofollow\">Demo 03<\/a>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4d\/8e\/6d\/4d8e6d539fc917c4deecda1bf74d6481.png\" alt=\"\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 any \u0438 unknown: any \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, unknown \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0443\u0436\u0435\u043d\u0438\u044f.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/4d\/8e\/6d\/4d8e6d539fc917c4deecda1bf74d6481.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/4d\/8e\/6d\/4d8e6d539fc917c4deecda1bf74d6481.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 any \u0438 unknown: any \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, unknown \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0443\u0436\u0435\u043d\u0438\u044f.<\/figcaption><\/div>\n<\/figure>\n<p><code><em>any<\/em><\/code><em> \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0431\u0435\u0437 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432, <\/em><code><em>unknown<\/em><\/code><em> \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0443\u0437\u0438\u0442\u044c \u0442\u0438\u043f.<\/em> <\/p>\n<p><strong>\u0418\u0442\u043e\u0433 \u0447\u0430\u0441\u0442\u0438:<\/strong> <code>any<\/code> \u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u2014 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u043d\u0435 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u0430 \u043f\u043e \u0432\u0441\u0435\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0435, \u043a\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u0430 \u00ab\u044f \u043d\u0435 \u0437\u043d\u0430\u044e \u0442\u0438\u043f\u00bb \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u2014 <code>unknown<\/code>.<\/p>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442 \u043b\u0438 \u044d\u0442\u043e, \u0447\u0442\u043e <code>any<\/code> \u043f\u043e\u0434 \u0437\u0430\u043f\u0440\u0435\u0442\u043e\u043c? \u041d\u0435\u0442 \u2014 \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0443\u0437\u043a\u0438\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0448\u0438: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u043a \u043d\u0435\u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 legacy-\u043a\u043e\u0434\u0443 (\u043e\u0431\u0451\u0440\u043d\u0443\u0442\u044b\u0439 \u0438 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439); \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 generic-\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u0440\u043e\u0434\u0435 <code>(...args: any[]) =&gt; any<\/code>, \u0433\u0434\u0435 <code>unknown[]<\/code> \u0438\u043c\u0435\u0435\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443; \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 escape hatch \u2014 \u0441 \u0443\u0437\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c \u0438 \u043f\u043b\u0430\u043d\u043e\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f. \u041e\u0431\u0449\u0435\u0435 \u0443 \u043d\u0438\u0445 \u043e\u0434\u043d\u043e: <code>any<\/code> \u0437\u0430\u043f\u0435\u0440\u0442 \u0432 \u0443\u0437\u043a\u0443\u044e, \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0438 \u043d\u0435 \u0440\u0430\u0441\u0442\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043a\u043e\u0434\u0443.<\/p>\n<hr\/>\n<h2>\u0427\u0430\u0441\u0442\u044c II. \u0421\u0443\u0437\u0438\u0442\u044c, \u0430 \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c<\/h2>\n<h3>04. \u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0435 \u0441\u0443\u0436\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u0431\u0435\u0440\u0438\u0442\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438, \u0430 \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c.<\/p>\n<pre><code>\/\/ \u274c \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438 \u043f\u0430\u0434\u0430\u0435\u043c \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445function format(value: string | number | Date): string {    return (value as string).toUpperCase();}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\/\/ \u2705 \u0441\u0443\u0436\u0435\u043d\u0438\u0435: \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 \u0442\u0438\u043f \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0442\u043e\u0447\u043d\u043efunction format(value: string | number | Date): string {    if (typeof value === \"string\") return value.toUpperCase();    if (typeof value === \"number\") return value.toFixed(2);    return value.toISOString();}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b: <code>typeof<\/code> \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432, <code>instanceof<\/code> \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432, <code>in<\/code> \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 <code>null<\/code>. \u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0442\u043a\u0438 \u0442\u0438\u043f \u2014 \u043f\u0440\u0430\u0432\u0434\u0430, \u0430 \u043d\u0435 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/04-narrowing\" rel=\"noopener noreferrer nofollow\">Demo 04<\/a>.<\/p>\n<h3>05. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 type guards<\/h3>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0444\u043e\u0440\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0442\u0438\u043f\u043e\u043c-\u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u043c <code>value is T<\/code>.<\/p>\n<pre><code>\/\/ \u274c guard, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0436\u0451\u0442: \u043e\u0431\u0435\u0449\u0430\u0435\u0442 User, \u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 idfunction isUser(value: unknown): value is User {    return typeof value === \"object\" &amp;&amp; value !== null &amp;&amp; \"id\" in value;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e guard\u2019\u0430 \u043e\u043d \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u043c <code>User<\/code> \u2014 \u0438 <code>any<\/code>-\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0435\u0442 \u043d\u0430 \u0448\u0430\u0433 \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<pre><code>\/\/ \u2705 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u0431\u0435\u0449\u0430\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430function isUser(value: unknown): value is User {    if (!isRecord(value)) return false;    if (!isNumber(value.id) || !isString(value.name)) return false;    return isRecord(value.profile) &amp;&amp; isNumber(value.profile.age);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0412\u0430\u0436\u043d\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430:<\/strong> \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 \u2014 \u044d\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0435\u0440\u0438\u0442 \u043d\u0430 \u0441\u043b\u043e\u0432\u043e. \u041f\u0438\u0448\u0438\u0442\u0435 guard \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u043e\u043d \u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442; \u0442\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u044c \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u043e\u043c. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/05-type-guards\" rel=\"noopener noreferrer nofollow\">Demo 05<\/a>.<\/p>\n<h3>06. Discriminated unions<\/h3>\n<p>\u0427\u0430\u0441\u0442\u043e <code>as<\/code> \u0438 <code>!<\/code> \u2014 \u0441\u0438\u043c\u043f\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0442\u0438\u043f \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e.<\/p>\n<pre><code>\/\/ \u274c \u0444\u043b\u0430\u0433 + \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 ok \u0438 datainterface Result {    ok: boolean;    data?: User;    error?: string;}const name = result.data!.name; \/\/ ! \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e data?: \u2014 \u043f\u0440\u0438 ok:false \u044d\u0442\u043e undefined<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\/\/ \u2705 \u0434\u0438\u0441\u043a\u0440\u0438\u043c\u0438\u043d\u0430\u043d\u0442 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u043c\u0438type Result =    | { status: \"success\"; data: User }    | { status: \"error\"; code: number; message: string };if (result.status === \"success\") {    result.data.name; \/\/ \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0434\u0435\u0441\u044c} else {    result.message; \/\/ \u0430 \u044d\u0442\u043e \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0434\u0435\u0441\u044c}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0439\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u043d\u0435\u0432\u044b\u0440\u0430\u0437\u0438\u043c\u044b, \u2014 \u0438 \u0441\u0443\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u00ab\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u043c\u00bb, \u0431\u0435\u0437 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/06-discriminated-unions\" rel=\"noopener noreferrer nofollow\">Demo 06<\/a>.<\/p>\n<h3>07. catch (e: unknown)<\/h3>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>catch<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u0438\u043f <code>unknown<\/code> \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u043c <code>useUnknownInCatchVariables<\/code> (\u0432\u0445\u043e\u0434\u0438\u0442 \u0432 <code>strict<\/code>, \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0441 TS 4.4). \u0418 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0434\u0438\u0440\u043a\u0430: \u0432 JavaScript <code>throw<\/code> \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<pre><code>\/\/ \u274c \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u0439\u043c\u0430\u043b\u0438 Errortry {    risky();} catch (e) {    log((e as Error).message); \/\/ \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a\u0438 .message === undefined}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\/\/ \u2705 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044ffunction getErrorMessage(error: unknown): string {    if (error instanceof Error) return error.message;    if (typeof error === \"string\") return error;    return \"\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430\";}try {    risky();} catch (error) {    log(getErrorMessage(error));}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u0432\u0435\u0434\u0438\u0442\u0435 \u043e\u0434\u0438\u043d \u0442\u0430\u043a\u043e\u0439 <code>getErrorMessage(e: unknown)<\/code> \u0438 \u0437\u043e\u0432\u0438\u0442\u0435 \u0435\u0433\u043e \u0432\u043e \u0432\u0441\u0435\u0445 <code>catch<\/code>. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/07-catch-unknown\" rel=\"noopener noreferrer nofollow\">Demo 07<\/a>.<\/p>\n<p><strong>\u0418\u0442\u043e\u0433 \u0447\u0430\u0441\u0442\u0438:<\/strong> \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u2014 \u0442\u0430, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u2014 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>unknown<\/code> \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f. \u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0436\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u044f\u0432\u043b\u044f\u0435\u0442 \u0442\u0438\u043f, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f, \u0438 \u0432\u0441\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432\u044b\u043b\u0435\u0437\u0430\u0435\u0442 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b \u043d\u0435 \u0436\u0434\u0430\u043b\u0438.<\/p>\n<hr\/>\n<h2>\u0427\u0430\u0441\u0442\u044c III. \u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0433\u0443\u0442: as \u0438 !<\/h2>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/74\/9d\/f5\/749df526ed27492ceaeb07f783cabd18.png\" alt=\"\u0421\u043b\u0435\u043f\u044b\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f as \u0438 ! \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432: \u0441\u0443\u0436\u0435\u043d\u0438\u0435, type guard, discriminated union \u0438 \u0440\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/74\/9d\/f5\/749df526ed27492ceaeb07f783cabd18.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/74\/9d\/f5\/749df526ed27492ceaeb07f783cabd18.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043b\u0435\u043f\u044b\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f as \u0438 ! \u043f\u0440\u043e\u0442\u0438\u0432 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432: \u0441\u0443\u0436\u0435\u043d\u0438\u0435, type guard, discriminated union \u0438 \u0440\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434.<\/figcaption><\/div>\n<\/figure>\n<p><em>\u0415\u0441\u043b\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0438\u043f \u2014 \u0434\u043e\u043a\u0430\u0436\u0438\u0442\u0435. \u0415\u0441\u043b\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u2014 \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0439\u0442\u0435.<\/em> <\/p>\n<h3>08. as \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442<\/h3>\n<p>\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u043d\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u0445 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u2014 \u043e\u043d\u043e \u043b\u0438\u0448\u044c \u043c\u0435\u043d\u044f\u0435\u0442 \u043c\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430.<\/p>\n<pre><code>\/\/ \u274c \u0434\u0432\u043e\u0439\u043d\u043e\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0436\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435 \u0444\u043e\u0440\u043c\u044bconst user = legacy as unknown as User;user.name.toUpperCase(); \/\/ user.name === undefined \u2192 \u043a\u0440\u0430\u0445<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>as any<\/code> \u0438 <code>as unknown as T<\/code> \u2014 \u043a\u0440\u0430\u0441\u043d\u044b\u0435 \u0444\u043b\u0430\u0433\u0438: \u0438\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043d\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442 \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0435 \u0442\u0438\u043f\u044b.<\/p>\n<pre><code>\/\/ \u2705 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u043f\u0438\u0448\u0435\u043c \u0435\u0433\u043e \u044f\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439function toUser(source: LegacyUser): User {    return { id: 0, name: source.fullName, email: \"\", profile: { bio: \"\", age: source.years } };}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u0431\u044b\u043b\u0438 \u0438\u043b\u0438 \u043e\u043f\u0435\u0447\u0430\u0442\u0430\u043b\u0438 \u043f\u043e\u043b\u0435 \u2014 \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0430 \u043d\u0435 <code>undefined<\/code> \u0432 \u043f\u0440\u043e\u0434\u0435. \u041a\u043e\u0433\u0434\u0430 <code>as<\/code> \u0432\u0441\u0451 \u0436\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 13. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/08-as-lies\" rel=\"noopener noreferrer nofollow\">Demo 08<\/a>.<\/p>\n<h3>09. satisfies \u0432\u043c\u0435\u0441\u0442\u043e as<\/h3>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0438\u043f\u0443, \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434.<\/p>\n<pre><code>\/\/ \u274c as \u043d\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u0438\u043f \u0438 \u0442\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u0438\u043a\u0443: primary \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f string | number[]const palette = {    primary: \"#6366f1\",    danger: [220, 38, 38],} as Record&lt;string, string | number[]&gt;;(palette.primary as string).toUpperCase(); \/\/ \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c \u0441\u043d\u043e\u0432\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\/\/ \u2705 satisfies \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0444\u043e\u0440\u043c\u0443, \u043d\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044f \u0432\u044b\u0432\u043e\u0434type ColorToken = \"primary\" | \"danger\";type RGB = [number, number, number];const palette = {    primary: \"#6366f1\",    danger: [220, 38, 38],} satisfies Record&lt;ColorToken, string | RGB&gt;;palette.primary.toUpperCase(); \/\/ primary \u043e\u0441\u0442\u0430\u043b\u0441\u044f string; \u0437\u0430\u0431\u044b\u0442\u044b\u0439 \u0438\u043b\u0438 \u043b\u0438\u0448\u043d\u0438\u0439 \u0442\u043e\u043a\u0435\u043d \u2014 \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041a\u043b\u044e\u0447\u0438 \u0437\u0434\u0435\u0441\u044c \u2014 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 union <code>ColorToken<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>satisfies<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0435\u0449\u0451 \u0438 \u043f\u043e\u043b\u043d\u043e\u0442\u0443: \u0437\u0430\u0431\u044b\u0442\u044b\u0439 \u0438\u043b\u0438 \u043b\u0438\u0448\u043d\u0438\u0439 \u0442\u043e\u043a\u0435\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0421 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c <code>Record&lt;string, \u2026&gt;<\/code> \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043b\u044e\u0447\u0435\u0439 \u043d\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u2014 \u0440\u0430\u0437\u0440\u0435\u0448\u0451\u043d \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u043a\u043b\u044e\u0447. <code>satisfies<\/code> (\u0441 TypeScript 4.9) \u2014 \u0442\u043e, \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438 \u0438\u043c\u0435\u044e\u0442 \u0432 \u0432\u0438\u0434\u0443, \u0434\u043e\u0442\u044f\u0433\u0438\u0432\u0430\u044f \u043e\u0431\u044a\u0435\u043a\u0442 <code>as<\/code>-\u043e\u043c; \u0435\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u2014 \u043a\u043e\u043d\u0444\u0438\u0433\u0438, \u043f\u0430\u043b\u0438\u0442\u0440\u044b, \u043a\u0430\u0440\u0442\u044b \u0440\u043e\u0443\u0442\u043e\u0432. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/09-satisfies\" rel=\"noopener noreferrer nofollow\">Demo 09<\/a>.<\/p>\n<h3>10. as const<\/h3>\n<p><code>as const<\/code> \u0447\u0430\u0441\u0442\u043e \u043f\u0443\u0442\u0430\u044e\u0442 \u0441 <code>as T<\/code>, \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c.<\/p>\n<pre><code>\/\/ \u274c \u0431\u0435\u0437 as const \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044fconst STATUSES = [\"idle\", \"loading\", \"done\"]; \/\/ string[]type Status = (typeof STATUSES)[number]; \/\/ string \u2014 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\/\/ \u2705 as const \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u044b \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 readonlyconst STATUSES = [\"idle\", \"loading\", \"done\"] as const;type Status = (typeof STATUSES)[number]; \/\/ \"idle\" | \"loading\" | \"done\"const LABELS: Record&lt;Status, string&gt; = {    idle: \"\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435\",    loading: \"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430\",    done: \"\u0413\u043e\u0442\u043e\u0432\u043e\", \/\/ \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 \u2014 \u043e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438};<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><code>as const<\/code> \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0430 \u043d\u0435 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443: union-\u0442\u0438\u043f\u044b, \u0438\u0441\u0447\u0435\u0440\u043f\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043a\u043b\u044e\u0447\u0438 \u0434\u043b\u044f <code>satisfies<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0433\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u043f\u0430\u0441\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 <code>as T<\/code>. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/10-as-const\" rel=\"noopener noreferrer nofollow\">Demo 10<\/a>.<\/p>\n<h3>11. Non-null \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 !<\/h3>\n<p><code>!<\/code> \u0432\u044b\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u0435\u0442 <code>null<\/code> \u0438 <code>undefined<\/code> \u0438\u0437 \u0442\u0438\u043f\u0430, \u043d\u043e \u043d\u0435 \u0438\u0437 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430.<\/p>\n<pre><code>\/\/ \u274c \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043b\u044e\u0447\u0430const name = users.get(id)!.name; \/\/ \u0434\u043b\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e id \u2192 undefined.name \u2192 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\/\/ \u2705 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442const user = users.get(id);if (!user) return notFound(id);const name = user.name;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <code>!<\/code>: \u044f\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0438 \u0440\u0430\u043d\u043d\u0438\u043c \u0432\u044b\u0445\u043e\u0434\u043e\u043c; <code>?.<\/code> \u0438 <code>??<\/code> \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e; \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439-\u0430\u0441\u0441\u0435\u0440\u0442\u043e\u043c, \u0435\u0441\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u2014 \u044d\u0442\u043e \u0431\u0430\u0433. \u0410 \u0444\u043b\u0430\u0433 <code>noUncheckedIndexedAccess<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 <code>undefined<\/code> \u043a \u0442\u0438\u043f\u0443 <code>arr[i]<\/code> \u0438 <code>map[key]<\/code>, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0430\u043c \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u043f\u0440\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/11-non-null\" rel=\"noopener noreferrer nofollow\">Demo 11<\/a>.<\/p>\n<p><strong>\u0418\u0442\u043e\u0433 \u0447\u0430\u0441\u0442\u0438:<\/strong> <code>as<\/code> \u0438 <code>!<\/code> \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0438\u0437 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c. \u041e\u043d\u0438 \u0443\u043c\u0435\u0441\u0442\u043d\u044b, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435 \u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u044d\u0442\u043e \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u0442\u044c, \u2014 \u0430 \u043d\u0435 \u043a\u043e\u0433\u0434\u0430 \u043b\u0435\u043d\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<hr\/>\n<h2>\u0427\u0430\u0441\u0442\u044c IV. \u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f: \u0433\u0434\u0435 unknown \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435<\/h2>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3b\/8c\/0a\/3b8c0aca02bf7cbdb92123b13acefb5e.png\" alt=\"\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f: \u0441\u043d\u0430\u0440\u0443\u0436\u0438 unknown, \u0437\u0430\u0442\u0435\u043c parse \u0438\u043b\u0438 schema, \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/3b\/8c\/0a\/3b8c0aca02bf7cbdb92123b13acefb5e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/3b\/8c\/0a\/3b8c0aca02bf7cbdb92123b13acefb5e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f: \u0441\u043d\u0430\u0440\u0443\u0436\u0438 unknown, \u0437\u0430\u0442\u0435\u043c parse \u0438\u043b\u0438 schema, \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f.<\/figcaption><\/div>\n<\/figure>\n<p><em>\u041d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f <\/em><code><em>unknown<\/em><\/code><em>; \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u0442\u0438\u043f.<\/em> <\/p>\n<h3>12. \u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u0432\u043d\u0435 \u2014 \u044d\u0442\u043e unknown<\/h3>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043b\u043e\u0432\u0443\u0448\u043a\u0430: <code>res.json()<\/code> \u0438 <code>JSON.parse<\/code> \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <code>any<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u0442\u0435\u043a\u0430\u044e\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<pre><code>\/\/ \u274c any \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430const user = await res.json(); \/\/ \u0442\u0438\u043f anyrender(user.profile.age); \/\/ \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0436\u0435 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\/\/ \u2705 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u2014 unknown, \u0434\u0430\u043b\u044c\u0448\u0435 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u00ab\u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435\u00bbconst raw: unknown = await res.json();const user = parseUser(raw); \/\/ \u043d\u0435\u0432\u0435\u0440\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u0442 \u0441 \u044f\u0432\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439render(user.profile.age); \/\/ \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u2014 \u0443\u0436\u0435 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 User<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u043e\u0432\u0430\u043b\u0438\u0434\u0438\u0440\u0443\u0439\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u2014 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e \u043a\u043e\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0439\u0442\u0435 \u0441 \u0442\u0438\u043f\u043e\u043c \u0431\u0435\u0437 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439. \u0412\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u2014 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u0430\u043c\u0438 (\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442, \u0437\u043b\u043e\u0432\u0440\u0435\u0434\u043d\u043e\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0435\u0442\u0441\u044f). <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/12-boundary\" rel=\"noopener noreferrer nofollow\">Demo 12<\/a>.<\/p>\n<p>\u0413\u0440\u0430\u043d\u0438\u0446 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043e\u0434\u0438\u043d \u2014 \u00ab\u0441\u043d\u0430\u0440\u0443\u0436\u0438 <code>unknown<\/code>\u00bb:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0444\u043e\u0440\u043c\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u043c<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>res.json()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 <code>any<\/code>, \u0444\u043e\u0440\u043c\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0431\u044d\u043a\u0435\u043d\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>unknown<\/code> + \u043f\u0430\u0440\u0441\u0435\u0440\/\u0441\u0445\u0435\u043c\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>localStorage<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0433 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>unknown<\/code> + \u0440\u0430\u0437\u0431\u043e\u0440 \u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>postMessage<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0448\u043b\u043e \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043e\u043a\u043d\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <code>origin<\/code> + \u0440\u0430\u0437\u0431\u043e\u0440 payload<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>catch (e)<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>getErrorMessage(e: unknown)<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0417\u0434\u0435\u0441\u044c \u044f \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0440\u0430\u0437\u0431\u043e\u0440 \u0440\u0443\u043a\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0434\u0435\u044e \u00abparse, don\u2019t validate\u00bb: \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0444\u043e\u0440\u043c\u0443, \u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u0443\u0436\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c. \u0412 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0442\u0443 \u0436\u0435 \u0440\u043e\u043b\u044c \u043d\u0430\u0434\u0451\u0436\u043d\u0435\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 schema-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Zod. \u042d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0442\u0435\u043c\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438 \u043f\u043e \u043d\u0435\u0439 \u044f \u043d\u0430\u043f\u0438\u0448\u0443 \u0441\u0442\u0430\u0442\u044c\u044e.<\/p>\n<h3>13. \u0413\u0434\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u044b<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u0438\u0445 \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432\u0430\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435: <code>as<\/code> \u0438 <code>!<\/code> \u2014 \u043d\u0435 \u0437\u043b\u043e \u0441\u0430\u043c\u0438 \u043f\u043e \u0441\u0435\u0431\u0435. \u0411\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044e \u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u0432\u044b, \u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0435\u0451 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442.<\/p>\n<pre><code>\/\/ \u274c as \u0431\u0435\u0437 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f: \u043a\u043b\u044e\u0447\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c, \u043d\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u043c \u0443\u0437\u043a\u0438\u0439 unionconst roles: Record&lt;string, number&gt; = loadRoles();const keys = Object.keys(roles) as Array&lt;\"admin\" | \"user\"&gt;;\/\/ \u0442\u0438\u043f \u043e\u0431\u0435\u0449\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e 'admin' | 'user', \u043d\u043e \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u0442\u0430\u043c \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438 'guest'<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<pre><code>\/\/ \u2705 as, \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0430const FEATURES = { search: true, darkMode: false };\/\/ Object.keys \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 string[] (\u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0431\u044b\u0432\u0430\u044e\u0442 \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438),\/\/ \u043d\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439, \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u2014 \u043d\u0430\u0431\u043e\u0440 \u043a\u043b\u044e\u0447\u0435\u0439 \u0437\u0430\u043c\u043a\u043d\u0443\u0442:const keys = Object.keys(FEATURES) as Array&lt;keyof typeof FEATURES&gt;;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0413\u0434\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0443\u043c\u0435\u0441\u0442\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><code>Object.keys<\/code> \/ <code>Object.entries<\/code> \u043d\u0430\u0434 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0441 \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043a\u043b\u044e\u0447\u0435\u0439 (\u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u0432\u043d\u0435) \u2014 \u044f\u0437\u044b\u043a \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043e\u0442\u0434\u0430\u0451\u0442 <code>string[]<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>as const<\/code> \u2014 \u0441\u0443\u0436\u0435\u043d\u0438\u0435 \u043a \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430\u043c (\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 10);<\/p>\n<\/li>\n<li>\n<p>\u0444\u0438\u043a\u0441\u0442\u0443\u0440\u044b \u0438 \u043c\u043e\u043a\u0438 \u0432 \u0442\u0435\u0441\u0442\u0430\u0445, \u0433\u0434\u0435 \u0444\u043e\u0440\u043c\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0438\u043f\u0430\u043c\u0438 \u043d\u0435 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c, \u2014 \u0447\u0435\u0440\u0435\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u044e-\u0430\u0441\u0441\u0435\u0440\u0442 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435: <code>function assert(c: unknown, m: string): asserts c { if (!c) throw new Error(m); }<\/code><\/p>\n<\/li>\n<li>\n<p>DOM \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 API \u2014 \u043d\u043e \u043f\u043e\u0441\u043b\u0435 <code>instanceof<\/code> \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0430 \u043d\u0435 \u0441\u043b\u0435\u043f\u044b\u043c <code>as<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0434\u043b\u044f review: \u043d\u0430\u043b\u0438\u0447\u0438\u0435 <code>as<\/code> \u2014 \u043d\u0435 \u043f\u043e\u0440\u043e\u043a; \u043f\u043e\u0440\u043e\u043a \u2014 <code>as<\/code> \u0431\u0435\u0437 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0440\u044f\u0434\u043e\u043c \u043d\u0435\u0442 \u043e\u0442\u0432\u0435\u0442\u0430, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u00ab\u0437\u0430\u0442\u044b\u0447\u043a\u0430\u00bb. <a href=\"https:\/\/github.com\/Viktoriko\/002_any\/tree\/master\/src\/demos\/13-legit-assertions\" rel=\"noopener noreferrer nofollow\">Demo 13<\/a>.<\/p>\n<p><strong>\u0418\u0442\u043e\u0433 \u0447\u0430\u0441\u0442\u0438:<\/strong> \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u0441\u0430\u043c\u043e\u0435 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f <code>unknown<\/code> (\u0445\u043e\u0442\u044f \u043e\u043d \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0438 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u0445). \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0444\u043e\u0440\u043c\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435, \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0438\u043f\u043e\u0432 \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442.<\/p>\n<hr\/>\n<h2>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/h2>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u0433\u0434\u0430 \u0443\u043c\u0435\u0441\u0442\u0435\u043d<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>any<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">legacy-\u0430\u0434\u0430\u043f\u0442\u0435\u0440, \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 generic-\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 escape hatch<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b\u043d\u0430\u044f \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u0440\u0430\u043d\u0442\u0430\u0439\u043c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>unknown<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u00ab\u041d\u0435 \u0437\u043d\u0430\u044e \u0442\u0438\u043f\u00bb \u0431\u0435\u0437 \u043f\u0440\u0430\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u0432\u043d\u0435, <code>catch<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0443\u0437\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0443\u0436\u0435\u043d\u0438\u0435 \/ guard<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0441\u0442\u044c \u0438 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, <code>unknown<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>satisfies<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0444\u043e\u0440\u043c\u0443, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0432\u044b\u0432\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043e\u043d\u0444\u0438\u0433\u0438, \u043f\u0430\u043b\u0438\u0442\u0440\u044b, \u0440\u043e\u0443\u0442\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0442\u0438\u043f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>as const<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0443\u0436\u0430\u0435\u0442 \u043a \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430\u043c, <code>readonly<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b, union\u2019\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0447\u0435\u0433\u043e \u2014 \u044d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>as T<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0435\u043d\u044f\u0435\u0442 \u043c\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>!<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u0431\u0438\u0440\u0430\u0435\u0442 null\/undefined \u0438\u0437 \u0442\u0438\u043f\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u043d\u0435-null<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u0435 \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0432 \u043e\u0434\u043d\u0443 \u00ab\u043b\u0435\u0441\u0442\u043d\u0438\u0446\u0443\u00bb: \u043e\u043d\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u0412\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u00ab\u0447\u0442\u043e \u043c\u043e\u0449\u043d\u0435\u0435\u00bb, \u0430 \u00ab\u043a\u0430\u043a\u043e\u0432\u0430 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u00bb.<\/p>\n<h2>\u0427\u0435\u043a-\u043b\u0438\u0441\u0442 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u0433\u043b\u0443\u0448\u0438\u0442\u044c \u0442\u0438\u043f<\/h2>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/e3\/7d\/00\/e37d00cc0fb260ae3d2853133da8f087.png\" alt=\"\u0414\u0435\u0440\u0435\u0432\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0439: \u043a\u0430\u043a\u043e\u0439 TypeScript-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e any, as \u0438 !.\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/e3\/7d\/00\/e37d00cc0fb260ae3d2853133da8f087.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/e3\/7d\/00\/e37d00cc0fb260ae3d2853133da8f087.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0414\u0435\u0440\u0435\u0432\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0439: \u043a\u0430\u043a\u043e\u0439 TypeScript-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e any, as \u0438 !.<\/figcaption><\/div>\n<\/figure>\n<p><em>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0438\u043f\u0430, \u043f\u043e\u0442\u043e\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0439\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442: <\/em><code><em>unknown<\/em><\/code><em>, guard, validation, <\/em><code><em>satisfies<\/em><\/code><em>, <\/em><code><em>as const<\/em><\/code><em> \u0438\u043b\u0438 \u044f\u0432\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443.<\/em> <\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u0435\u043c\u043e<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u043e\u0447\u043d\u043e \u043b\u0438 \u044f \u043d\u0435 \u0437\u043d\u0430\u044e \u0442\u0438\u043f?<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>unknown<\/code> + \u0441\u0443\u0436\u0435\u043d\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">03\u201304<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0435\u0442\u0438 \/ JSON \/ storage<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u043b\u0438 \u044f \u0444\u043e\u0440\u043c\u0443?<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">12<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 <code>catch<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>e: unknown<\/code> + guard<\/p>\n<\/td>\n<td>\n<p align=\"left\">07<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u00ab\u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u00bb \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0442\u0438\u043f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043e\u0433\u0443 \u043b\u0438 \u044f \u044d\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c?<\/p>\n<\/td>\n<td>\n<p align=\"left\">guard \/ <code>satisfies<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">05, 09<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0424\u043b\u0430\u0433 + \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435 \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438 \u044f\u0432\u043d\u043e?<\/p>\n<\/td>\n<td>\n<p align=\"left\">Discriminated union<\/p>\n<\/td>\n<td>\n<p align=\"left\">06<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0423\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u043d\u0435 <code>null<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e \u0442\u0438\u043f?<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435 \/ <code>?.<\/code> \/ \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">11<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041b\u0438\u0442\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>satisfies<\/code> \/ <code>as const<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">09, 10<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>\u0427\u0442\u043e \u044d\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e\u0431 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u043e\u0439 \u0437\u0440\u0435\u043b\u043e\u0441\u0442\u0438<\/h3>\n<p>\u041c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0441\u0438\u043b\u044c\u043d\u044b\u0439 TypeScript \u0432\u0438\u0434\u0435\u043d \u043d\u0435 \u0432 \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u0438\u043f\u0430\u0445, \u0430 \u0432 \u0442\u043e\u043c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u044b \u0433\u0440\u0430\u043d\u0438\u0446\u044b: \u0433\u0434\u0435 \u043a\u043e\u043d\u0447\u0430\u0435\u0442\u0441\u044f \u00ab\u043d\u0435 \u0437\u043d\u0430\u044e \u0442\u0438\u043f\u00bb \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u00ab\u0434\u043e\u043a\u0430\u0437\u0430\u043b\u00bb, \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u0448\u043b\u0438 \u0438\u0437\u0432\u043d\u0435, \u0430 \u0433\u0434\u0435 \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u044b. \u041e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442 \u043e\u0442 \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u00ab\u0437\u0430\u0442\u044b\u0447\u043a\u0438\u00bb \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0443 \u2014 \u043c\u043e\u0436\u0435\u0448\u044c \u043b\u0438 \u0442\u044b \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443.<\/p>\n<p>\u0414\u043b\u044f \u0442\u0438\u043c\u043b\u0438\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u043d\u0438\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u043c:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430 review \u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0435 \u00ab\u0443\u0431\u0435\u0440\u0438 <code>any<\/code>\u00bb, \u0430 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443: \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0442\u0438\u043f, \u043d\u0435\u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u043b\u0438 \u043d\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u0430\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0438 \u0442\u0435\u0441\u0442\u043e\u043c \u2014 \u043d\u0430 \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u043e\u0441\u044c \u0432 \u0437\u0430\u043f\u0440\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u044b \u043d\u0435 \u0432\u0432\u043e\u0434\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u00ab\u043d\u0438\u043a\u0430\u043a\u0438\u0445 <code>any<\/code> \u0438 <code>as<\/code>\u00bb. \u041c\u044b \u0434\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0438 \u043f\u043e\u0447\u0435\u043c\u0443. \u0415\u0441\u043b\u0438 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0437\u043d\u0430\u0447\u0438\u0442, \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u043e\u0449\u0435 \u0438 \u044f\u0441\u043d\u0435\u0435.<\/p>\n<h3>\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/Viktoriko\/002_any\" rel=\"noopener noreferrer nofollow\">Playground \u0441 13 TypeScript-\u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438, \u043e\u0431\u0451\u0440\u043d\u0443\u0442\u044b\u043c\u0438 \u0432 React-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/2\/narrowing.html\" rel=\"noopener noreferrer nofollow\">TypeScript Handbook \u2014 Narrowing<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/2\/everyday-types.html\" rel=\"noopener noreferrer nofollow\">TypeScript Handbook \u2014 Everyday Types (<code>unknown<\/code>, <code>any<\/code>)<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.typescriptlang.org\/docs\/handbook\/release-notes\/typescript-4-9.html\" rel=\"noopener noreferrer nofollow\"><code>satisfies<\/code> (TypeScript 4.9)<\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.typescriptlang.org\/tsconfig\/#useUnknownInCatchVariables\" rel=\"noopener noreferrer nofollow\"><code>useUnknownInCatchVariables<\/code><\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.typescriptlang.org\/tsconfig\/noUncheckedIndexedAccess.html\" rel=\"noopener noreferrer nofollow\"><code>noUncheckedIndexedAccess<\/code><\/a>.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435<\/h3>\n<p>\u042d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0446\u0438\u043a\u043b\u0430 \u2014 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u0431\u043e\u0440\u044b:<\/p>\n<ul>\n<li>\n<p>\u0433\u0440\u0430\u043d\u0438\u0446\u0430 server\/client \u0438 \u00abuse client\u00bb;<\/p>\n<\/li>\n<li>\n<p>TanStack Query: \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 Redux;<\/p>\n<\/li>\n<li>\n<p>\u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u0432 React: \u043f\u0440\u043e\u043f\u0441\u044b, \u0445\u0443\u043a\u0438, \u0441\u043e\u0431\u044b\u0442\u0438\u044f, ref.<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u2014 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c. \u0410 \u0435\u0449\u0451 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043a\u0430\u043a\u0443\u044e \u0442\u0435\u043c\u0443 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0441 \u0447\u0435\u043c \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445: \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u043f\u0443\u0441\u043a\u043e\u0432 \u2014 \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0441 \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u0432\u0430\u0448\u0435\u0433\u043e \u043a\u0435\u0439\u0441\u0430.<\/p>\n<h3>\u041e\u0431 \u0430\u0432\u0442\u043e\u0440\u0435<\/h3>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u0438\u043a\u0442\u043e\u0440 \u0413\u043e\u0440\u0431\u0430\u0447\u0451\u0432. \u041c\u043e\u0439 Telegram \u2014 <a href=\"https:\/\/t.me\/team_viktoriko\" rel=\"noopener noreferrer nofollow\">@team_viktoriko<\/a>. Senior Frontend-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438 Team Lead. \u0411\u043e\u043b\u0435\u0435 7 \u043b\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u0430 React \u0438 TypeScript. \u041c\u043e\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0437\u043e\u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u2014 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 frontend-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439: \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0441 \u043d\u0443\u043b\u044f, \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 enterprise-\u0441\u0438\u0441\u0442\u0435\u043c, \u043c\u0438\u043a\u0440\u043e\u0444\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u044b, \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 Webpack \u0438 Vite, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043e\u0432.<\/p>\n<p>\u041d\u0430 \u0425\u0430\u0431\u0440\u0435 \u043f\u0438\u0448\u0443 \u043e frontend-\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435, \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435, \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043e\u043f\u044b\u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u043d\u043e \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0438\u0437\u0443 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442: \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432.<\/p>\n<p>\u0410 \u0433\u0434\u0435 \u0443 \u0432\u0430\u0441 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u044b\u043c <code>as<\/code>, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u043c <code>any<\/code> \u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 runtime-\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439? \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442 \u0432 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u2014 \u043f\u0440\u0438\u043d\u0435\u0441\u0438\u0442\u0435 \u0435\u0433\u043e \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1055944\/\">https:\/\/habr.com\/ru\/articles\/1055944\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>any, as \u0438 ! \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0438\u043f\u043e\u0432; unknown \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.any, as \u0438 ! \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435: \u044f \u0437\u043d\u0430\u044e \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e? \u042d\u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0446\u0438\u043a\u043b\u0430 \u043e TypeScript \u0438 React \u0433\u043b\u0430\u0437\u0430\u043c\u0438 code review. \u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u2014 \u00ab\u041d\u0443\u0436\u0435\u043d \u043b\u0438 \u0437\u0434\u0435\u0441\u044c useEffect? 12 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0438\u0437 React-\u043a\u043e\u0434-\u0440\u0435\u0432\u044c\u044e \u2014 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e React 19.2\u00bb.\u041a\u0440\u0430\u0441\u043d\u0430\u044f \u0432\u043e\u043b\u043d\u0438\u0441\u0442\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u043f\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0435\u0442, \u0438 \u0441\u0430\u043c\u044b\u0439 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0435\u0451 \u0443\u0431\u0440\u0430\u0442\u044c \u2014 \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c any, as \u0438\u043b\u0438 !. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0430\u043c\u043e\u043b\u043a\u0430\u0435\u0442, \u0441\u0431\u043e\u0440\u043a\u0430 \u0437\u0435\u043b\u0435\u043d\u0435\u0435\u0442, PR \u0443\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u0448\u0435. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0441\u044c: \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0430 \u0438\u0437 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c, \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.\u0417\u0430 \u0433\u043e\u0434\u044b \u0440\u0435\u0432\u044c\u044e \u2014 \u0447\u0443\u0436\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u2014 \u044f \u043f\u0440\u0438\u0432\u044b\u043a \u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u0438 \u0442\u0440\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043a\u0430\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u0443. \u041e\u043d\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u043c\u0435\u0447\u0430\u044e\u0442 \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0442\u0438\u043f \u043d\u0435 \u043e\u043f\u0438\u0441\u0430\u043d, \u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0439 \u0438 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0447\u0430\u0449\u0435 \u2014 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441, \u0441\u0447\u0451\u0442 \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0437\u0436\u0435 \u0438 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443.\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 code review \u044f \u0437\u0430\u0434\u0430\u044e \u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0435 \u00ab\u043a\u0430\u043a \u0437\u0430\u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b TypeScript \u0437\u0430\u043c\u043e\u043b\u0447\u0430\u043b\u00bb, \u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441:\u0427\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044f \u0437\u0434\u0435\u0441\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e \u2014 \u0438 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043b\u044c\u0437\u044f?\u0412\u0435\u0434\u0443 frontend-\u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0432\u043e\u0436\u0443 \u0432 \u0447\u0443\u0436\u0438\u0445 \u0434\u0438\u0444\u0444\u0430\u0445, \u0438 \u043f\u0440\u043e any, as \u0438 ! \u0443 \u043d\u0430\u0441 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u043b\u043e\u0436\u0438\u043b\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u0432\u043e\u0434 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0451\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f review. \u0418\u0437 \u043d\u0435\u0433\u043e \u0438 \u0432\u044b\u0440\u043e\u0441\u043b\u0430 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f: 13 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0434\u0438\u043d \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430 \u00ab\u043f\u043b\u043e\u0445\u043e \u2192 \u0445\u043e\u0440\u043e\u0448\u043e\u00bb \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 TypeScript 6 \u2014 \u0432\u0441\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0432 playground (\u043e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 React, \u043d\u043e \u0441\u0430\u043c\u0438 \u043f\u0440\u0438\u0451\u043c\u044b \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a TypeScript \u0432 \u0446\u0435\u043b\u043e\u043c). \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c any \u0438 unknown, \u0441\u0443\u0436\u0435\u043d\u0438\u0435 \u0438 type guards, satisfies, as const, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ! \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435.\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c:\u0422\u0438\u043f\u044b \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0435 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u044f \u043e \u0434\u0430\u043d\u043d\u044b\u0445. any, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 as T \u0438 !, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0431\u0435\u0437 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430. \u0415\u0441\u043b\u0438 \u0442\u0438\u043f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u2014 \u044d\u0442\u043e unknown \u0438 \u0441\u0443\u0436\u0435\u043d\u0438\u0435; \u0435\u0441\u043b\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d, \u043d\u043e \u043d\u0435\u0432\u0438\u0434\u0435\u043d \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u2014 \u044d\u0442\u043e guard, \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0430 \u043d\u0435 \u0441\u043b\u0435\u043f\u043e\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435.\u0421\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430, \u0435\u0441\u043b\u0438 \u0432\u044b:\u043f\u0438\u0448\u0435\u0442\u0435 \u043d\u0430 TypeScript \u0432 strict-\u0440\u0435\u0436\u0438\u043c\u0435;\u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u0438\u0434\u0438\u0442\u0435 any, as \u0438 ! \u043d\u0430 review;\u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435, \u043a\u043e\u0433\u0434\u0430 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043e;\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0435 \u0441\u043b\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 API \u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c.\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 TypeScript Handbook (\u0440\u0430\u0437\u0434\u0435\u043b\u044b Everyday Types, Narrowing, \u0430 \u0442\u0430\u043a\u0436\u0435 unknown \u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 satisfies). \u0417\u0434\u0435\u0441\u044c \u044f \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f\u043c\u0438 \u0438\u0437 code review, \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u043c \u0447\u0435\u043a-\u043b\u0438\u0441\u0442\u043e\u043c, \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438 TypeScript 6 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u043c playground.\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u0432\u0435\u0440\u0441\u0438\u044f\u043c: \u0432 TS 6 strict \u0441\u0442\u0430\u043b \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u043c \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439, \u0430 useUnknownInCatchVariables \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e strict \u0435\u0449\u0451 \u0441 TS 4.4. TypeScript 7 \u0443\u0436\u0435 \u0431\u043b\u0438\u0437\u043a\u043e \u0438 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u043d\u043e\u0432\u043e\u0439 Go-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043d\u043e \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c any \/ unknown \/ as \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f.\u0421\u0442\u0440\u043e\u0433\u0438\u0439 tsconfig, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0431\u0440\u0430\u043d \u0438 \u0441\u0430\u043c playground:{  &#171;compilerOptions&#187;: {    &#171;strict&#187;: true,    &#171;useUnknownInCatchVariables&#187;: true,    &#171;noUncheckedIndexedAccess&#187;: true,    &#171;exactOptionalPropertyTypes&#187;: true  }}strict \u2014 \u0431\u0430\u0437\u0430, useUnknownInCatchVariables \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c. noUncheckedIndexedAccess (\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 undefined \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443) \u0438 exactOptionalPropertyTypes \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u0438 \u0441\u0442\u0440\u043e\u0433\u043e\u0441\u0442\u0438: \u0432 \u0437\u0440\u0435\u043b\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442 \u0441\u0440\u0430\u0437\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u0445 \u0441\u0442\u043e\u0438\u0442 \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e.\u041a\u043e\u0440\u043e\u0442\u043a\u0430\u044f \u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c\u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u00ab\u0437\u0430\u0433\u043b\u0443\u0448\u0438\u0442\u044c\u00bb \u0442\u0438\u043f, \u044f \u0437\u0430\u0434\u0430\u044e \u0442\u0440\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430.\u042f \u0437\u043d\u0430\u044e \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043c\u043e\u0433\u0443 \u0435\u0451 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u2014 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e? \u041c\u043e\u0433\u0443 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u2014 \u0441\u0443\u0436\u0430\u044e (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0438\u043b\u0438 guard\u2019\u043e\u043c). \u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e \u0431\u0435\u0437 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u2014 \u043f\u0435\u0440\u0435\u043d\u043e\u0448\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f.\u041e\u0442\u043a\u0443\u0434\u0430 \u0434\u0430\u043d\u043d\u044b\u0435? \u0415\u0441\u043b\u0438 \u0438\u0437\u0432\u043d\u0435 (\u0441\u0435\u0442\u044c, JSON.parse, localStorage, postMessage, catch) \u2014 \u0438\u0445 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0442\u0438\u043f unknown, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0435.\u042f \u0433\u0430\u0448\u0443 \u043e\u0448\u0438\u0431\u043a\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e, \u2014 \u0438\u043b\u0438 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0443 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f? \u041f\u0435\u0440\u0432\u043e\u0435 \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043e \u0438 \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c. \u0412\u0442\u043e\u0440\u043e\u0435 \u2014 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u0433 \u0441 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0441\u0440\u043e\u043a\u043e\u043c.\u0422\u0440\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u043f\u0435\u0440\u0435\u0434 any, as \u0438 !: \u0437\u043d\u0430\u044e \u043b\u0438 \u0444\u043e\u0440\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0438\u0448\u043b\u0438 \u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u0432\u043d\u0435, \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043b\u0438 \u0442\u0438\u043f.\u041f\u0435\u0440\u0435\u0434 any, as \u0438 ! \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443: \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0442\u0438\u043f, \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u0412\u0441\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043d\u0438\u0436\u0435 \u2014 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u044d\u0442\u0438 \u0442\u0440\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430.\u0413\u0434\u0435 TypeScript \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0437\u0430\u0449\u0438\u0449\u0430\u0442\u044c\u041e\u0434\u0438\u043d \u0431\u0430\u0433 \u044f \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b \u043d\u0430\u0434\u043e\u043b\u0433\u043e. \u0423\u0442\u0440\u043e\u043c \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u0435\u0442 \u043e\u0442\u0447\u0451\u0442: \u0443 \u0447\u0430\u0441\u0442\u0438 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u043b\u044b\u043c \u044d\u043a\u0440\u0430\u043d\u043e\u043c. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u044e \u043a\u043e\u0434 \u2014 \u0442\u0440\u0438 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0433\u043e\u0434\u0430\u043c\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 review \u0431\u0435\u0437 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432. \u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0438\u0436\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 (\u044f \u0441\u0432\u0451\u043b \u0432 \u043e\u0434\u0438\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432), \u043d\u043e \u0443\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u044b\u0439:type UserDto = {  profile?: { fullName: string };  metrics: unknown;};const user = (await res.json()) as UserDto; \/\/ \u0444\u043e\u0440\u043c\u0443 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043bconst name = user.profile!.fullName;        \/\/ profile \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u2014 ! \u044d\u0442\u043e \u0433\u043b\u0443\u0448\u0438\u0442const rating: any = user.metrics;           \/\/ metrics \u0431\u044b\u043b unknown, \u0430 \u043c\u044b \u0432\u0435\u0440\u043d\u0443\u043b\u0438 anyrenderProfile(name, rating.score * 10);\u0421\u0431\u043e\u0440\u043a\u0430 \u0431\u044b\u043b\u0430 \u0437\u0435\u043b\u0451\u043d\u043e\u0439, \u0442\u0438\u043f\u044b \u00ab\u0441\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c\u00bb, \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u2014 \u0440\u043e\u0432\u043d\u043e \u0434\u043e \u0434\u043d\u044f, \u043a\u043e\u0433\u0434\u0430 \u0431\u044d\u043a\u0435\u043d\u0434 \u043d\u0430\u0447\u0430\u043b \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0442\u044c profile: null \u0434\u043b\u044f \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u0432 \u0431\u0435\u0437 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u0430\u043d\u043a\u0435\u0442\u044b. \u0421\u0432\u043e\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432\u043d\u0435\u0441\u043b\u0430 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430: as UserDto \u0432\u043f\u0443\u0441\u0442\u0438\u043b \u043e\u0442\u0432\u0435\u0442 \u0431\u0435\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0444\u043e\u0440\u043c\u044b \u2014 \u0430 profile: null \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u0436\u0435 \u043f\u043e\u0434 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 profile?: {&#8230;}; profile! \u0437\u0430\u0433\u043b\u0443\u0448\u0438\u043b \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043f\u0440\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c; \u0438 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c null \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a .fullName \u0443\u0440\u043e\u043d\u0438\u043b\u043e \u0440\u0435\u043d\u0434\u0435\u0440. \u041f\u043e\u043b\u0435 metrics \u0431\u044d\u043a\u0435\u043d\u0434-\u0442\u0438\u043f \u043e\u0431\u044a\u044f\u0432\u0438\u043b \u043a\u0430\u043a unknown, \u043d\u043e : any \u0432\u0435\u0440\u043d\u0443\u043b \u0432\u0441\u0451 \u043d\u0430\u0437\u0430\u0434 \u2014 rating.score \u043f\u0440\u043e\u0441\u0442\u043e \u0436\u0434\u0430\u043b \u0441\u0432\u043e\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.\u041d\u0430 review \u043c\u044b \u043d\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u044d\u0442\u0438 \u0442\u0440\u0438 \u043c\u0435\u0441\u0442\u0430 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u044b:as UserDto \u2014 \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0432 \u0444\u043e\u0440\u043c\u0443: profile: null \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0430\u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443;profile! \u2014 \u0442\u0438\u043f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e profile \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d; ! \u0433\u043b\u0443\u0448\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f;metrics: any \u2014 \u043f\u043e\u043b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043e \u043a\u0430\u043a unknown, \u043d\u043e : any \u0441\u043d\u043e\u0432\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438; \u043d\u0443\u0436\u043d\u043e \u0441\u0443\u0437\u0438\u0442\u044c.\u041f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u043a\u0430\u043a \u0443\u0431\u0440\u0430\u0442\u044c \u0442\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0442\u0438\u043f\u043e\u0432?\u00bb \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c?\u00bb. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u043d\u0430\u0432\u044b\u043a \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b: \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0442\u044c any, \u0430 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043f\u043e\u0434 \u043d\u0435\u0451.\u0427\u0430\u0441\u0442\u044c I. any \u2014 \u044d\u0442\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0430 \u043d\u0435 \u0442\u0438\u043f01. any \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438any \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u043f\u043e\u0447\u0442\u0438 \u0441 \u043b\u044e\u0431\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u0432 \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b (\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u2014 never), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u0438\u043a\u043e\u043c.\/\/ \u274c any \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u043e\u043b\u044f\u043cconst user: any = await res.json();const age = user.profile.age; \/\/ \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f; \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u2014 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u0435 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0430 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. any \u2014 \u044d\u0442\u043e \u043d\u0435 \u00ab\u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u043d\u0430\u044e\u00bb, \u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u0430\u044f \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430.\/\/ \u2705 unknown \u043e\u0431\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0434\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u043e\u043b\u044f\u043cconst raw: unknown = await res.json();const user = parseUser(raw); \/\/ \u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440 \u0432\u0435\u0440\u043d\u0451\u0442 User \u0438\u043b\u0438 \u0431\u0440\u043e\u0441\u0438\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443\u0413\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438: \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0432\u044b\u0431\u0440\u043e\u0441\u0438\u0442\u0435. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0436\u0438\u0442\u044c \u0434\u043e\u043b\u044c\u0448\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 unknown \u0438 \u0441\u0443\u0436\u0435\u043d\u0438\u0435. Demo 01.02. any \u0437\u0430\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u0435\u043dany \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f: \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c, \u0432\u044b\u0437\u043e\u0432\u044b \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0434 \u043d\u0438\u043c \u0441\u043d\u043e\u0432\u0430 \u0434\u0430\u044e\u0442 any (\u0430 \u0432\u043e\u0442, \u0441\u043a\u0430\u0436\u0435\u043c, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 typeof \u2014 \u0443\u0436\u0435 \u043d\u0435\u0442).\/\/ \u274c \u043e\u0448\u0438\u0431\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0437\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435const data: any = await res.json();const total = data.profile.age + data.bonus; \/\/ bonus \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u2192 NaN, \u0438 \u044d\u0442\u043e \u0442\u043e\u0436\u0435 any\u041e\u043f\u0435\u0447\u0430\u0442\u043a\u0430 \u0432 \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u043b\u044f \u043f\u0440\u043e\u0448\u043b\u0430 \u043c\u043e\u043b\u0447\u0430, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 \u0441\u043d\u043e\u0432\u0430 any, \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u0435\u0437\u0434\u0435, \u043a\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u043b\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0414\u0430\u0436\u0435 \u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0438\u0445\u0438\u0439 NaN.\/\/ \u2705 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \u043d\u0435 \u0434\u0430\u0451\u0442 \u043e\u0448\u0438\u0431\u043a\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044fconst user = parseUser(raw);const total = user.profile.age + user.bonus;\/\/                                    ~~~~~\/\/ \u041e\u0448\u0438\u0431\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438: \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 &#8216;bonus&#8217; \u043d\u0435\u0442 \u0443 \u0442\u0438\u043f\u0430 &#8216;User&#8217;.\u0417\u0434\u0435\u0441\u044c any \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u0430 \u043c\u0435\u0448\u0430\u0435\u0442: \u00ab\u0437\u0430\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u00bb \u2014 \u0435\u0433\u043e \u0446\u0435\u043d\u0430, \u0430 \u043d\u0435 \u0444\u0438\u0447\u0430. Demo 02.03. unknown \u0432\u043c\u0435\u0441\u0442\u043e anyany \u0438 unknown \u043e\u0431\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 \u043b\u044e\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u043e \u0442\u043e\u043b\u044c\u043a\u043e unknown \u0438 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00ab\u0442\u0438\u043f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d\u00bb \u2014 any \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0449\u0451 \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.\/\/ \u274c any \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043econst value: any = source();value.toUpperCase(); \/\/ \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043e\u0432\u043e\u043b\u0435\u043d, \u043d\u043e \u0434\u043b\u044f \u0447\u0438\u0441\u043b\u0430 \u0438\u043b\u0438 null \u044d\u0442\u043e TypeError\/\/ \u2705 unknown \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u043e \u043d\u0435 \u0434\u0430\u0451\u0442 \u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u0441\u0443\u0436\u0435\u043d\u0438\u044fconst value: unknown = source();\/\/ value.toUpperCase();            \/\/ \u041e\u0448\u0438\u0431\u043a\u0430: &#8216;value&#8217; is of type &#8216;unknown&#8217;.if (typeof value === &#171;string&#187;) {    value.toUpperCase(); \/\/ \u0437\u0434\u0435\u0441\u044c value \u0441\u0443\u0436\u0435\u043d \u0434\u043e string}\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e: \u0435\u0441\u043b\u0438 \u0442\u044f\u043d\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c any, \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0443\u0436\u0435\u043d unknown \u043f\u043b\u044e\u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430. Demo 03.\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 any \u0438 unknown: any \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, unknown \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0443\u0436\u0435\u043d\u0438\u044f.any \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0431\u0435\u0437 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432, unknown \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0443\u0437\u0438\u0442\u044c \u0442\u0438\u043f. \u0418\u0442\u043e\u0433 \u0447\u0430\u0441\u0442\u0438: any \u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u2014 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u043d\u0435 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435, \u0430 \u043f\u043e \u0432\u0441\u0435\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0435, \u043a\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041d\u0430 \u00ab\u044f \u043d\u0435 \u0437\u043d\u0430\u044e \u0442\u0438\u043f\u00bb \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u2014 unknown.\u0417\u043d\u0430\u0447\u0438\u0442 \u043b\u0438 \u044d\u0442\u043e, \u0447\u0442\u043e any \u043f\u043e\u0434 \u0437\u0430\u043f\u0440\u0435\u0442\u043e\u043c? \u041d\u0435\u0442 \u2014 \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0443\u0437\u043a\u0438\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0448\u0438: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u043a \u043d\u0435\u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 legacy-\u043a\u043e\u0434\u0443 (\u043e\u0431\u0451\u0440\u043d\u0443\u0442\u044b\u0439 \u0438 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439); \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 generic-\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u0440\u043e\u0434\u0435 (&#8230;args: any[]) =&gt; any, \u0433\u0434\u0435 unknown[] \u0438\u043c\u0435\u0435\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443; \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 escape hatch \u2014 \u0441 \u0443\u0437\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c \u0438 \u043f\u043b\u0430\u043d\u043e\u043c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f. \u041e\u0431\u0449\u0435\u0435 \u0443 \u043d\u0438\u0445 \u043e\u0434\u043d\u043e: any \u0437\u0430\u043f\u0435\u0440\u0442 \u0432 \u0443\u0437\u043a\u0443\u044e, \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0438 \u043d\u0435 \u0440\u0430\u0441\u0442\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043a\u043e\u0434\u0443.\u0427\u0430\u0441\u0442\u044c II. \u0421\u0443\u0437\u0438\u0442\u044c, \u0430 \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c04. \u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0435 \u0441\u0443\u0436\u0435\u043d\u0438\u0435\u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435, \u0440\u0430\u0437\u0431\u0435\u0440\u0438\u0442\u0435 \u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438, \u0430 \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c.\/\/ \u274c \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438 \u043f\u0430\u0434\u0430\u0435\u043c \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445function format(value: string | number | Date): string {    return (value as string).toUpperCase();}\/\/ \u2705 \u0441\u0443\u0436\u0435\u043d\u0438\u0435: \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0442\u043a\u0435 \u0442\u0438\u043f \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0442\u043e\u0447\u043d\u043efunction format(value: string | number | Date): string {    if (typeof value === &#171;string&#187;) return value.toUpperCase();    if (typeof value === &#171;number&#187;) return value.toFixed(2);    return value.toISOString();}\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b: typeof \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432, instanceof \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u043e\u0432, in \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 null. \u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0442\u043a\u0438 \u0442\u0438\u043f \u2014 \u043f\u0440\u0430\u0432\u0434\u0430, \u0430 \u043d\u0435 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435. Demo 04.05. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 type guards\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0444\u043e\u0440\u043c\u044b \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u0442\u0438\u043f\u043e\u043c-\u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u043e\u043c value is T.\/\/ \u274c guard, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0436\u0451\u0442: \u043e\u0431\u0435\u0449\u0430\u0435\u0442 User, \u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 idfunction isUser(value: unknown): value is User {    return&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-486302","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/486302","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=486302"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/486302\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=486302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=486302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=486302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}