{"id":309751,"date":"2020-09-10T15:00:46","date_gmt":"2020-09-10T15:00:46","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=309751"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=309751","title":{"rendered":"TypeScript. \u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0442\u0438\u043f\u044b"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/518428\/\"><a href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/518428\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/tp\/lg\/92\/tplg92pw4s6bzkegzavvmciugrg.jpeg\" alt=\"image\"><\/a><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0438! \u041c\u044b \u0441\u0434\u0430\u043b\u0438 \u0432 \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e \u043d\u043e\u0432\u0438\u043d\u043a\u0443 <br \/>  &quot;<a href=\"https:\/\/www.piter.com\/collection\/soon\/product\/professionalnyy-typescript-razrabotka-masshtabiruemyh-javascript-prilozheniy?_gs_cttl=120&amp;gs_direct_link=1&amp;gsaid=42817&amp;gsmid=29789&amp;gstid=c\">\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 TypeScript. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0445 JavaScript-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/a>&quot;. \u0412 \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 JavaScript \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435, \u0443\u0437\u043d\u0430\u044e\u0442, \u043a\u0430\u043a \u043e\u0441\u0432\u043e\u0438\u0442\u044c TypeScript. \u0412\u044b \u043f\u043e\u0439\u043c\u0435\u0442\u0435, \u043a\u0430\u043a TypeScript \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 10 \u0440\u0430\u0437 \u043b\u0443\u0447\u0448\u0435 \u0438 \u0441\u043d\u043e\u0432\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c. <\/p>\n<p>  \u0412\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043e\u0442\u0440\u044b\u0432\u043e\u043a \u043e\u0434\u043d\u043e\u0439 \u0433\u043b\u0430\u0432\u044b \u0438\u0437 \u043a\u043d\u0438\u0433\u0438 \u00ab\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0442\u0438\u043f\u044b\u00bb.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0442\u0438\u043f\u044b<\/h3>\n<p>  \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0438\u043f\u043e\u0432 TypeScript, \u043f\u0440\u0438\u0437\u043d\u0430\u043d\u043d\u0430\u044f \u0432\u043e \u0432\u0441\u0435\u043c \u043c\u0438\u0440\u0435, \u0441\u0432\u043e\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0443\u0434\u0438\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u0436\u0435 Haskell-\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432. \u041a\u0430\u043a \u0432\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u043e\u043d\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u0430, \u043d\u043e \u0438 \u043b\u0435\u0433\u043a\u0430 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438: \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0438 \u0441\u0432\u044f\u0437\u0438 \u0432 \u043d\u0435\u0439 \u043a\u0440\u0430\u0442\u043a\u0438, \u043f\u043e\u043d\u044f\u0442\u043d\u044b \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>  \u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e JavaScript, \u043a\u0430\u043a \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 this, \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0432\u0435\u0447\u043d\u043e \u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u0433\u0430\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432 \u0438 \u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u0430\u0436\u0435 \u0411\u044d\u0442\u043c\u0435\u043d \u0432\u0437\u044f\u043b \u0431\u044b \u043d\u0430 \u0432\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u042f \u043d\u0430\u0447\u043d\u0443 \u044d\u0442\u0443 \u0433\u043b\u0430\u0432\u0443 \u0441 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u0442\u0435\u043c\u044b \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438, \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u0438, \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u0417\u0430\u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u043e\u044e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435 \u0438 \u0442\u043e\u0442\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0442\u0438\u043f\u043e\u0432: \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0449\u0438\u0442 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0437\u0430\u043f\u0430\u0441\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u0440\u043e\u0434\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439 \u044f\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u044f. \u0412 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u044f \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u044e \u0432\u0430\u0441 \u0441 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u043c\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u043c\u0438 \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u043e\u0432: \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442-\u043a\u043e\u043c\u043f\u0430\u043d\u044c\u043e\u043d, \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0434\u043b\u044f \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439, \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u043e\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430.<\/p>\n<p>  <b>\u0421\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0442\u0438\u043f\u0430\u043c\u0438<\/b><\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0432\u044f\u0437\u0438 \u0432 TypeScript \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<p>  <b>\u041f\u043e\u0434\u0442\u0438\u043f\u044b \u0438 \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u044b<\/b><\/p>\n<p>  \u041c\u044b \u0443\u0436\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u043b\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u00ab\u041e \u0442\u0438\u043f\u0430\u0445\u00bb \u043d\u0430 \u0441. 34, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0440\u0430\u0437\u0443 \u0443\u0433\u043b\u0443\u0431\u0438\u043c\u0441\u044f \u0432 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u0430.  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pu\/wx\/-_\/puwx-_cnnn-hyxot6aonshplivs.png\" alt=\"image\"><\/div>\n<p>  \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u043a \u0440\u0438\u0441. 3.1 \u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0432 TypeScript \u0441\u0432\u044f\u0437\u0438 \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432.  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/2h\/2v\/to\/2h2vtogs2dcmxw_ll6ldo0wi8jc.png\" alt=\"image\"><\/div>\n<ul>\n<li>\u041c\u0430\u0441\u0441\u0438\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/li>\n<li>\u041a\u043e\u0440\u0442\u0435\u0436 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<\/li>\n<li>\u0412\u0441\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c any.<\/li>\n<li>never \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u0432\u0441\u0435\u0433\u043e.<\/li>\n<li>\u041a\u043b\u0430\u0441\u0441 Bird, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044e\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 Animal, \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0442\u0438\u043f \u043a\u043b\u0430\u0441\u0441\u0430 Animal.<\/li>\n<\/ul>\n<p>  \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0434\u0430\u043b \u0434\u043b\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u0430, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\u0412\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u043d\u0443\u0436\u0435\u043d \u043e\u0431\u044a\u0435\u043a\u0442, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432.<\/li>\n<li>\u0412\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u043d\u0443\u0436\u0435\u043d \u043c\u0430\u0441\u0441\u0438\u0432, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0440\u0442\u0435\u0436.<\/li>\n<li>\u0412\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u043d\u0443\u0436\u0435\u043d any, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442.<\/li>\n<li>\u0412\u0435\u0437\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c never.<\/li>\n<li>\u0412\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u043d\u0443\u0436\u0435\u043d Animal, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Bird.<\/li>\n<\/ul>\n<p>  \u0421\u0443\u043f\u0435\u0440\u0442\u0438\u043f \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0442\u0438\u043f\u0430.<\/p>\n<blockquote><p><b>\u0421\u0423\u041f\u0415\u0420\u0422\u0418\u041f<\/b><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0442\u0438\u043f\u0430, A \u0438 B, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c B \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u043e\u043c A, \u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c A \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f B (\u0440\u0438\u0441. 6.2).<\/p><\/blockquote>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/zf\/zc\/ig\/zfzcig2xls2rnoy8x1axjshkkyi.png\" alt=\"image\"><\/div>\n<p>  \u0418 \u0441\u043d\u043e\u0432\u0430 \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0441\u0445\u0435\u043c\u044b \u043d\u0430 \u0440\u0438\u0441. 3.1:<\/p>\n<ul>\n<li>\u041c\u0430\u0441\u0441\u0438\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u043e\u043c \u043a\u043e\u0440\u0442\u0435\u0436\u0430.<\/li>\n<li>\u041e\u0431\u044a\u0435\u043a\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430.<\/li>\n<li>Any \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u043e\u043c \u0432\u0441\u0435\u0433\u043e.<\/li>\n<li>Never \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u044c\u0438\u043c-\u043b\u0438\u0431\u043e \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u043e\u043c.<\/li>\n<li>Animal \u2014 \u044d\u0442\u043e \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f Bird.<\/li>\n<\/ul>\n<p>  \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u043e\u0434\u0442\u0438\u043f\u0430\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435.<\/p>\n<p>  <b>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c<\/b><\/p>\n<p>  \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0442\u0438\u043f\u043e\u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043d\u0435\u043a\u0438\u0439 \u0442\u0438\u043f A \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c B. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 number, string \u0438 \u0434\u0440. \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u0445\u0435\u043c\u0435 \u043d\u0430 \u0440\u0438\u0441. 3.1 \u0438\u043b\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e number, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439\u0441\u044f \u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 number | string, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041d\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0435. \u041f\u043e\u0434\u0443\u043c\u0430\u0439\u0442\u0435 \u043d\u0430\u0434 \u0442\u0430\u043a\u0438\u043c\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\u041a\u043e\u0433\u0434\u0430 Array&lt;A&gt; \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c Array&lt;\u0412&gt;?<\/li>\n<li>\u041a\u043e\u0433\u0434\u0430 \u0444\u043e\u0440\u043c\u0430 A \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u0444\u043e\u0440\u043c\u044b B?<\/li>\n<li>\u041a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f (a: A) =&gt; B \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (c: C) =&gt; D?<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u043f\u043e\u0434\u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043f\u044b (\u0442\u043e \u0435\u0441\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0438\u043f\u0430 \u0432\u0440\u043e\u0434\u0435 Array&lt;A&gt;, \u0444\u043e\u0440\u043c\u044b \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 {a: number} \u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0440\u043e\u0434\u0435 (a: A) =&gt; B), \u043e\u0441\u043c\u044b\u0441\u043b\u0438\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u044b \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b, \u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 TypeScript (\u043d\u0435 \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0439\u0442\u0435\u0441\u044c, \u043e\u043d \u043d\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439):<\/p>\n<ul>\n<li>A &lt;: B \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u00abA \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u0442\u043e\u0433\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 \u0442\u0438\u043f B\u00bb;<\/li>\n<li>A &gt;: B \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u00abA \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u043e\u043c \u0442\u043e\u0433\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 \u0442\u0438\u043f B\u00bb.<\/li>\n<\/ul>\n<p>  <b>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u044b \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/b><\/p>\n<p>  \u041f\u043e\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044f\u0437\u044b\u043a\u0438 \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u0445 \u043f\u043e\u0434\u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0444\u043e\u0440\u043c\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043f\u0430\u0440\u044b \u0442\u0438\u043f\u043e\u0432:<\/p>\n<pre><code class=\"javascript\">\/\/ \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430. type ExistingUser = {     id: number    name: string } \/\/ \u041d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u0435\u0449\u0435 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. type NewUser = {    name: string }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0441\u0442\u0430\u0436\u0435\u0440 \u0432 \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u043d \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e:<\/p>\n<pre><code class=\"javascript\">function deleteUser(user: {id?: number, name: string}) {     delete user.id } let existingUser: ExistingUser = {     id: 123456,     name: 'Ima User' } deleteUser(existingUser)<\/code><\/pre>\n<p>  deleteUser \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 {id?: number, name: string} \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0432 \u043d\u0435\u0433\u043e existingUser \u0442\u0438\u043f\u0430 {id: number, name: string}. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0442\u0438\u043f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 id (number) \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0442\u0438\u043f \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430 (number | undefined). \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0435\u0441\u044c \u043e\u0431\u044a\u0435\u043a\u0442 {id: number, name: string} \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0442\u0438\u043f {id?: number, name: string}, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 TypeScript \u044d\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442.<\/p>\n<p>  \u0412\u0438\u0434\u0438\u0442\u0435 \u043b\u0438 \u0432\u044b \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c\u044e? \u0415\u0441\u0442\u044c \u043e\u0434\u043d\u0430: \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 ExistingUser \u0432 deleteUser TypeScript \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e id \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0431\u044b\u043b \u0443\u0434\u0430\u043b\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 existingUser.id \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f deleteUser(existingUser), \u0442\u043e TypeScript \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e existingUser.id \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f number.<\/p>\n<p>  \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f, \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e. \u0422\u0430\u043a \u043f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 TypeScript \u044d\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442? \u0421\u0443\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u043b\u0441\u044f \u043a\u0430\u043a \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439. \u0415\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0438\u043f\u043e\u0432 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f (\u0432\u0440\u043e\u0434\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430) \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u0438 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, TypeScript \u0440\u0430\u0441\u0441\u043b\u0430\u0431\u043b\u0435\u043d \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f.<\/p>\n<p>  \u0410 \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f: \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043f\u043e\u0434\u0442\u0438\u043f?<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0441 \u044d\u0442\u0438\u043c \u0442\u0438\u043f\u043e\u043c (\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0442\u0438\u043f\u044b \u0432 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432\u0430\u0448 \u043a\u043e\u043b\u043b\u0435\u0433\u0430):<\/p>\n<pre><code class=\"javascript\">type LegacyUser = {     id?: number | string     name: string } let legacyUser: LegacyUser = {     id: '793331',     name: 'Xin Yang' } deleteUser(legacyUser) \/\/ \u041e\u0448\u0438\u0431\u043a\u0430 TS2345: a\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0442\u0438\u043f\u0430 'LegacyUser'                                   \/\/ \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0442\u0438\u043f\u0430                                   \/\/ '{id?: number |undefined, name: string}'.                                  \/\/ \u0422\u0438\u043f 'string' \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u0442\u0438\u043f\u043e\u043c 'number |                                  \/\/ undefined'.<\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0435 \u0444\u043e\u0440\u043c\u0443 \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u0447\u0435\u0439 \u0442\u0438\u043f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u043e\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430, TypeScript \u0440\u0443\u0433\u0430\u0435\u0442\u0441\u044f. \u0412\u0441\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e id \u2014 \u044d\u0442\u043e string | number | undefined, \u0430 deleteUser \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u0433\u0434\u0435 id \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f number | undefined.<\/p>\n<p>  \u041e\u0436\u0438\u0434\u0430\u044f \u0444\u043e\u0440\u043c\u0443, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u0438\u043f \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 &lt;: \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0431\u0435\u0437 \u0442\u0438\u043f\u043e\u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u0430\u043c\u0438 \u0438\u0445 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u041a\u043e\u0433\u0434\u0430 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e \u0442\u0438\u043f\u0430\u0445, \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c: \u00abTypeScript-\u0444\u043e\u0440\u043c\u044b (\u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043a\u043b\u0430\u0441\u0441\u044b) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u043c\u0438 \u0432 \u0442\u0438\u043f\u0430\u0445 \u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u00bb. \u0422\u043e \u0435\u0441\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u044a\u0435\u043a\u0442 A \u043c\u043e\u0433 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u0443 B, \u043a\u0430\u0436\u0434\u043e\u0435 \u0435\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c &lt;: \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0435\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 B.<\/p>\n<p>  \u041a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u2014 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0432\u0438\u0434\u043e\u0432 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u0438:<\/p>\n<p>  <i>\u0418\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c<\/i><br \/>   \u041d\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e T.<br \/>  <i>\u041a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c<\/i><br \/>   \u041d\u0443\u0436\u0435\u043d &lt;:T.<br \/>  <i>\u041a\u043e\u043d\u0442\u0440\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c<\/i><br \/>   \u041d\u0443\u0436\u0435\u043d &gt;:T.<br \/>  <i>\u0411\u0438\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c<\/i><br \/>   \u0423\u0441\u0442\u0440\u043e\u0438\u0442 \u043b\u0438\u0431\u043e &lt;:T, \u043b\u0438\u0431\u043e &gt;:T.<\/p>\n<p>  \u0412 TypeScript \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0442\u0438\u043f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u043c \u0432 \u0441\u0432\u043e\u0438\u0445 \u0447\u043b\u0435\u043d\u0430\u0445 \u2014 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445, \u043a\u043b\u0430\u0441\u0441\u0430\u0445, \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0437\u0430 \u043e\u0434\u043d\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c: \u0442\u0438\u043f\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b.<\/p>\n<blockquote><p>\u041d\u0435 \u0432\u0441\u0435 \u044f\u0437\u044b\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u0412 \u043e\u0434\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u043c\u0438 \u0432 \u0442\u0438\u043f\u0430\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043c\u043e\u0433\u0443\u0442 \u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e. \u0414\u0440\u0443\u0433\u0438\u0435 \u044f\u0437\u044b\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0438 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (\u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043f\u043e\u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e). \u0422\u0440\u0435\u0442\u044c\u0438, \u0432\u0440\u043e\u0434\u0435 Scala, Kotlin \u0438 Flow, \u0434\u0430\u0436\u0435 \u0438\u043c\u0435\u044e\u0442 \u044f\u0432\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0438 TypeScript \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u043b\u0438 \u0431\u0430\u043b\u0430\u043d\u0441: \u0438\u043d\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0442\u0438\u043f\u0430\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c, \u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0438\u043f\u043e\u0432, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0430\u0441 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 \u0434\u0435\u043b\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0442\u044c id \u0432 deleteUser, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u043e\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439).<\/p><\/blockquote>\n<p>  <b>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/b><\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432.<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f A \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 B, \u0435\u0441\u043b\u0438 A \u0438\u043c\u0435\u0435\u0442 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0443\u044e \u0430\u0440\u043d\u043e\u0441\u0442\u044c (\u0447\u0438\u0441\u043b\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432), \u0447\u0435\u043c B, \u0438:<\/p>\n<ol>\n<li>\u0422\u0438\u043f this, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0439 A, \u043b\u0438\u0431\u043e \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d, \u043b\u0438\u0431\u043e &gt;: \u0442\u0438\u043f\u0430 this, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0435\u0433\u043e B.<\/li>\n<li>\u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 A &gt;: \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 B.<\/li>\n<li>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0442\u0438\u043f A &lt;: \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430 B.<\/li>\n<\/ol>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u044f A \u043c\u043e\u0433\u043b\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 B, \u0435\u0435 \u0442\u0438\u043f this \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c &gt;: \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u0432 B, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0435\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0442\u0438\u043f \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c &lt;:. \u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0437\u0432\u043e\u0440\u043e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044f? \u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 &lt;: \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 (\u0442\u0438\u043f\u0430 this, \u0442\u0438\u043f\u043e\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430), \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u0442. \u0434.?<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 (\u0432\u043c\u0435\u0441\u0442\u043e class \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043f\u044b, \u0433\u0434\u0435 A :&lt; B &lt;: C):<\/p>\n<pre><code class=\"javascript\">class Animal {} class Bird extends Animal {     chirp() {} } class Crow extends Bird {     caw() {} }<\/code><\/pre>\n<p>  \u0418\u0442\u0430\u043a, Crow &lt;: Bird &lt;: Animal.<\/p>\n<p>  \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0443\u044e Bird \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0443\u044e \u0435\u0435 \u0447\u0438\u0440\u0438\u043a\u0430\u0442\u044c:<\/p>\n<pre><code class=\"javascript\">function chirp(bird: Bird): Bird {     bird.chirp()     return bird }<\/code><\/pre>\n<p>  \u041f\u043e\u043a\u0430 \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e. \u0427\u0442\u043e TypeScript \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 chirp?<\/p>\n<pre><code class=\"javascript\">chirp(new Animal) \/\/ \u041e\u0448\u0438\u0431\u043a\u0430 TS2345: \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0442\u0438\u043f\u0430 'Animal' chirp(new Bird) \/\/ \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0442\u0438\u043f\u0430 'Bird'. chirp(new Crow)<\/code><\/pre>\n<p>  \u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Bird (\u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 chirp \u0442\u0438\u043f\u0430 bird) \u0438\u043b\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 Crow (\u043a\u0430\u043a \u043f\u043e\u0434\u0442\u0438\u043f Bird). \u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u043e\u0434\u0442\u0438\u043f\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u0430\u043a \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0435\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0431\u0443\u0434\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439:<\/p>\n<pre><code class=\"javascript\">function clone(f: (b: Bird) =&gt; Bird): void {     \/\/ ... }<\/code><\/pre>\n<p>  clone \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f f, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0430\u044f Bird \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f Bird. \u041a\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0434\u043b\u044f f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e? \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0443\u044e \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0443\u044e Bird:<\/p>\n<pre><code class=\"javascript\">function birdToBird(b: Bird): Bird {     \/\/ ... } clone(birdToBird) \/\/ OK<\/code><\/pre>\n<p>  \u0427\u0442\u043e \u043d\u0430\u0441\u0447\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0435\u0439 Bird, \u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0435\u0439 Crow \u0438\u043b\u0438 Animal?<\/p>\n<pre><code class=\"javascript\">function birdToCrow(d: Bird): Crow {     \/\/ ... } clone(birdToCrow) \/\/ OK function birdToAnimal(d: Bird): Animal {     \/\/ ... } clone(birdToAnimal) \/\/ \u041e\u0448\u0438\u0431\u043a\u0430 TS2345: \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0442\u0438\u043f\u0430 '(d: Bird) =&gt;                              \/\/ Animal' \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0442\u0438\u043f\u0430                             \/\/ '(b: Bird) =&gt; Bird'.\u0422\u0438\u043f 'Animal'                            \/\/ \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u0442\u0438\u043f\u043e\u043c 'Bird'.<\/code><\/pre>\n<p>  birdToCrow \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u0430\u043a \u0438 \u043e\u0436\u0438\u0434\u0430\u043b\u043e\u0441\u044c, \u043d\u043e birdToAnimal \u0432\u044b\u0434\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f clone \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">function clone(f: (b: Bird) =&gt; Bird): void {     let parent = new Bird     let babyBird = f(parent)     babyBird.chirp() }<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0434\u0430\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 clone \u0444\u0443\u043d\u043a\u0446\u0438\u044e f, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0443\u044e Animal, \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u0439 .chirp. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 TypeScript \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0430\u044f \u043d\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c Bird.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b \u0432 \u0438\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0442\u0438\u043f\u0430\u0445, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0435\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0442\u0438\u043f &lt;: \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0425\u043e\u0440\u043e\u0448\u043e, \u0430 \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0435\u0442 \u0442\u0438\u043f\u043e\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432?<\/p>\n<pre><code class=\"javascript\">function animalToBird(a: Animal): Bird {   \/\/ ... } clone(animalToBird) \/\/ OK function crowToBird(c: Crow): Bird {   \/\/ ... } clone(crowToBird)        \/\/ \u041e\u0448\u0438\u0431\u043a\u0430 TS2345: \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0442\u0438\u043f\u0430 '(c: Crow) =&gt;                         \/\/ Bird' \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0442\u0438\u043f\u0430 '                        \/\/ (b: Bird) =&gt; Bird'.<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439, \u0432\u0441\u0435 \u0435\u0435 \u0442\u0438\u043f\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f this) \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c &gt;: \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u043e\u0447\u0435\u043c\u0443, \u043f\u043e\u0434\u0443\u043c\u0430\u0439\u0442\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0433 \u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c crowToBird, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0435 \u0432 clone?<\/p>\n<pre><code class=\"javascript\">function crowToBird(c: Crow): Bird {   c.caw()   return new Bird }<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p><b>TSC-\u0424\u041b\u0410\u0413: STRICTFUNCTIONTYPES<\/b><\/p>\n<p>  \u0418\u0437-\u0437\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 TypeScript \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0438 \u0442\u0438\u043f\u0430\u0445 this. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0435 \u043a\u043e\u043d\u0442\u0440\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0438\u0437\u0443\u0447\u0438\u043b\u0438, \u043d\u0443\u0436\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u043b\u0430\u0433 {\u00abstrictFunctionTypes\u00bb: true} \u0432 tsconfig.json.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 {\u00abstrict\u00bb: true}, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p><\/blockquote>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 clone \u0432\u044b\u0437\u043e\u0432\u0435\u0442 crowToBird \u0441 new Bird, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 .caw \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0432\u043e \u0432\u0441\u0435\u0445 Crow, \u043d\u043e \u043d\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 Bird.<\/p>\n<p>  \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u043d\u0442\u0440\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b \u0432 \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0438 \u0442\u0438\u043f\u0430\u0445 this. \u0422\u043e \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0435\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u0442\u0438\u043f this \u0431\u0443\u0434\u0443\u0442 &gt;: \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u044d\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0443\u0447\u0438\u0432\u0430\u0442\u044c. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043e \u043d\u0438\u0445, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u0441\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0435 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0432\u0430\u043c\u0438 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u0443\u0434\u0430-\u043b\u0438\u0431\u043e.<\/p>\n<p>  <b>\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c<\/b><\/p>\n<p>  \u0412\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438 \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u0432 \u0438 \u0441\u0443\u043f\u0435\u0440\u0442\u0438\u043f\u043e\u0432 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0435\u0439 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u041e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u0432\u0430\u0436\u043d\u044b \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c (\u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c TypeScript, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u0430 A \u0442\u0430\u043c, \u0433\u0434\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f B).<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 TypeScript \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441: \u00ab\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u043b\u0438 \u0442\u0438\u043f A \u0441 \u0442\u0438\u043f\u043e\u043c B?\u00bb, \u043e\u043d \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c. \u0414\u043b\u044f \u043d\u0435 enum-\u0442\u0438\u043f\u043e\u0432 \u2014 \u0432\u0440\u043e\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432, \u0447\u0438\u0441\u0435\u043b, \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0441\u0442\u0440\u043e\u043a, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0442\u0438\u043f\u044b \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u2014 A \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 B, \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439.<\/p>\n<ol>\n<li>A &lt;: B.<\/li>\n<li>A \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f any.<\/li>\n<\/ol>\n<p>  \u041f\u0440\u0430\u0432\u0438\u043b\u043e 1 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0442\u0438\u043f\u0430: \u0435\u0441\u043b\u0438 A \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0442\u0438\u043f\u043e\u043c B, \u0442\u043e\u0433\u0434\u0430 \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u043d\u0443\u0436\u0435\u043d B, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c A.<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0438\u043b\u043e 2 \u2014 \u044d\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 1 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043a\u043e\u0434\u043e\u043c JavaScript.<br \/>  \u0414\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 enum \u0438\u043b\u0438 const enum, \u0442\u0438\u043f A \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c B, \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u043e \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439.<\/p>\n<ol>\n<li>A \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u043b\u0435\u043d\u043e\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f B.<\/li>\n<li>B \u0438\u043c\u0435\u0435\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0447\u043b\u0435\u043d \u0442\u0438\u043f\u0430 number, \u0430 A \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f number.<\/li>\n<\/ol>\n<p>  \u041f\u0440\u0430\u0432\u0438\u043b\u043e 1 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u043e\u0435 \u0436\u0435, \u043a\u0430\u043a \u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 (\u0435\u0441\u043b\u0438 A \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u043b\u0435\u043d\u043e\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f B, \u0442\u043e\u0433\u0434\u0430 A \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f B \u0438 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e B &lt;: B).<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0438\u043b\u043e 2 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \u043f\u043e\u0434\u0440\u044b\u0432\u0430\u044e\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432 TypeScript (\u0441\u043c. \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b \u00abEnum\u00bb \u043d\u0430 \u0441. 60), \u0438 \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0445 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c.<\/p>\n<p>  <b>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432<\/b><\/p>\n<p>  \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u2014 \u044d\u0442\u043e \u043a\u043b\u044e\u0447 \u043a \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0438\u043f\u043e\u0432. TypeScript \u0441\u043d\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043d \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0442\u0438\u043f\u0430, \u0447\u0435\u043c \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e. \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u0432\u0430\u043c \u0436\u0438\u0437\u043d\u044c \u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u0431\u043e\u0440\u044c\u0431\u0443 \u0441 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f\u043c\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432.<\/p>\n<p>  \u0412 \u0433\u043b\u0430\u0432\u0435 3 \u0432\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0443\u044e (\u0441 let \u0438\u043b\u0438 var), \u0435\u0435 \u0442\u0438\u043f \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u0442\u0438\u043f\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0435\u0435 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 \u0434\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043b\u0438\u0442\u0435\u0440\u0430\u043b \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442:<\/p>\n<pre><code class=\"javascript\">let a = 'x' \/\/ string let b = 3   \/\/ number var c = true   \/\/ boolean const d = {x: 3}   \/\/ {x: number} enum E {X, Y, Z} let e = E.X   \/\/ E<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043d\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439:<\/p>\n<pre><code class=\"javascript\">const a = 'x' \/\/ 'x' const b = 3   \/\/ 3 const c = true   \/\/ true enum E {X, Y, Z} const e = E.X   \/\/ E.X<\/code><\/pre>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044f\u0432\u043d\u0443\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e \u0442\u0438\u043f\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"javascript\">let a: 'x' = 'x' \/\/ 'x' let b: 3 = 3  \/\/ 3 var c: true = true  \/\/ true const d: {x: 3} = {x: 3}  \/\/ {x: 3}<\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0435 \u043d\u0435\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e let \u0438\u043b\u0438 var, TypeScript \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0435\u0433\u043e \u0437\u0430 \u0432\u0430\u0441. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u044f\u0432\u043d\u0443\u044e \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044e \u0442\u0438\u043f\u0430 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"javascript\">const a = 'x' \/\/ 'x' let b = a  \/\/ string const c: 'x' = 'x'  \/\/ 'x' let d = c  \/\/ 'x'<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a null \u0438\u043b\u0438 undefined, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044e\u0442\u0441\u044f \u0434\u043e any:<\/p>\n<pre><code class=\"javascript\">let a = null \/\/ any a = 3  \/\/ any a = 'b'  \/\/ any<\/code><\/pre>\n<p>  \u041d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u0430\u043a null \u0438\u043b\u0438 undefined, \u043f\u043e\u043a\u0438\u0434\u0430\u0435\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430, TypeScript \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0435\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f:<\/p>\n<pre><code class=\"javascript\">function x() {    let a = null  \/\/ any    a = 3   \/\/ any    a = 'b'   \/\/ any    return a } x()   \/\/ string<\/code><\/pre>\n<p>  <b>\u0422\u0438\u043f const<\/b><\/p>\n<p>  \u0422\u0438\u043f const \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0435\u0433\u043e \u043a\u0430\u043a \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 (\u0441\u043c. \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b \u00ab\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432\u00bb \u043d\u0430 \u0441. 185):<\/p>\n<pre><code class=\"javascript\">let a = {x: 3}   \/\/ {x: number} let b: {x: 3}    \/\/ {x: 3} let c = {x: 3} as const   \/\/ {readonly x: 3}<\/code><\/pre>\n<p>  const \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u0442 \u0435\u0433\u043e \u0447\u043b\u0435\u043d\u044b \u043a\u0430\u043a readonly \u0434\u0430\u0436\u0435 \u0432 \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<pre><code class=\"javascript\">let d = [1, {x: 2}]              \/\/ (number | {x: number})[] let e = [1, {x: 2}] as const    \/\/ readonly [1, {readonly x: 2}]<\/code><\/pre>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 as const, \u043a\u043e\u0433\u0434\u0430 \u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b TypeScript \u0432\u044b\u0432\u0435\u043b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u0437\u043a\u0438\u0439 \u0442\u0438\u043f.<\/p>\n<p>  <b>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432<\/b><\/p>\n<p>  \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 TypeScript \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u0434\u0438\u043d \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>  \u0422\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b \u0432 \u0438\u0445 \u0447\u043b\u0435\u043d\u0430\u0445 (\u0441\u043c. \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b \u00ab\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0444\u043e\u0440\u043c\u044b \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u00bb \u043d\u0430 \u0441. 148). \u041d\u043e, \u0435\u0441\u043b\u0438 TypeScript \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u0443 \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 Options, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n<pre><code class=\"javascript\">type Options = {     baseURL: string     cacheSize?: number     tier?: 'prod' | 'dev' } class API {     constructor(private options: Options) {} } new API({      baseURL: 'https:\/\/api.mysite.com',      tier: 'prod' })<\/code><\/pre>\n<p>  \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0442\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u043e\u043f\u0446\u0438\u0438?<\/p>\n<pre><code class=\"javascript\">new API({    baseURL: 'https:\/\/api.mysite.com',    tierr: 'prod'         \/\/ \u041e\u0448\u0438\u0431\u043a\u0430 TS2345: \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0442\u0438\u043f\u0430 '{tierr: string}' })                      \/\/ \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0442\u0438\u043f\u0430 'Options'.                         \/\/ \u041e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e                        \/\/ \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u043e 'tierr' \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442                       \/\/ \u0432 \u0442\u0438\u043f\u0435 'Options'. \u0412\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c 'tier'?<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0431\u0430\u0433 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 JavaScript, \u0438 \u0445\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e TypeScript \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c. \u041d\u043e \u0435\u0441\u043b\u0438 \u0442\u0438\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043d\u044b \u0432 \u0438\u0445 \u0447\u043b\u0435\u043d\u0430\u0445, \u043a\u0430\u043a TypeScript \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442?<\/p>\n<p>  \u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f:<\/p>\n<ul>\n<li>\u041c\u044b \u043e\u0436\u0438\u0434\u0430\u043b\u0438 \u0442\u0438\u043f {baseURL: string, cacheSize?: number, tier?: &#8216;prod&#8217; | &#8216;dev&#8217;}.<\/li>\n<li>\u041c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u0442\u0438\u043f {baseURL: string, tierr: string}.<\/li>\n<li>\u041f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0442\u0438\u043f \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043d\u043e TypeScript \u0437\u043d\u0430\u043b, \u0447\u0442\u043e \u043d\u0430\u0434\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.<\/li>\n<\/ul>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f <i>\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432<\/i>, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 T \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0442\u0438\u043f\u0443, U, \u0430 \u0432 T \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0432 U, TypeScript \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<p>  \u041d\u043e\u0432\u044b\u0439 <i>\u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430<\/i> \u2014 \u044d\u0442\u043e \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 TypeScript \u0432\u044b\u0432\u0435\u043b \u0438\u0437 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 (\u0441\u043c. \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b \u00ab\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432\u00bb \u043d\u0430 \u0441. 185) \u0438\u043b\u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0442\u043e\u0433\u0434\u0430 \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0435\u0433\u043e \u043d\u043e\u0432\u0438\u0437\u043d\u0430 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442.<\/p>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0435\u043c\u043a\u0438\u043c:<\/p>\n<pre><code class=\"javascript\">type Options = {      baseURL: string      cacheSize?: number      tier?: 'prod' | 'dev' } class API {     constructor(private options: Options) {} } new API({ \u2776     baseURL: 'https:\/\/api.mysite.com',     tier: 'prod' }) new API({ \u2777     baseURL: 'https:\/\/api.mysite.com',     badTier: 'prod' \/\/ \u041e\u0448\u0438\u0431\u043a\u0430 TS2345: \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0442\u0438\u043f\u0430 '{baseURL: }) \/\/ string; badTier: string}' \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \/\/ \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0442\u0438\u043f\u0430 'Options'. new API({ \u2778     baseURL: 'https:\/\/api.mysite.com',     badTier: 'prod' } as Options) let badOptions = { \u2779     baseURL: 'https:\/\/api.mysite.com',     badTier: 'prod' } new API(badOptions) let options: Options = { \u277a     baseURL: 'https:\/\/api.mysite.com',     badTier: 'prod' \/\/ \u041e\u0448\u0438\u0431\u043a\u0430 TS2322: \u0442\u0438\u043f '{baseURL: string; } \/\/ badTier: string}'\u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u0442\u0438\u043f\u043e\u043c \/\/ 'Options'. new API(options)<\/code><\/pre>\n<p>  \u2776 \u0418\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u043d\u0438\u0440\u0443\u0435\u043c API \u0441 baseURL \u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432: tier. \u0412\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  \u2777 \u041e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c tier \u043a\u0430\u043a badTier. \u041e\u0431\u044a\u0435\u043a\u0442 \u043e\u043f\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 new API, \u2014 \u043d\u043e\u0432\u044b\u0439 (\u0435\u0433\u043e \u0442\u0438\u043f \u0432\u044b\u0432\u0435\u0434\u0435\u043d, \u043e\u043d \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0438 \u043c\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 TypeScript \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u043b\u0438\u0448\u043d\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e badTier (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u043e\u043f\u0446\u0438\u0439, \u043d\u043e \u043d\u0435 \u0432 \u0442\u0438\u043f\u0435 Options).<\/p>\n<p>  \u2778 \u0414\u0435\u043b\u0430\u0435\u043c \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043e\u043f\u0446\u0438\u0439 \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f Options. TypeScript \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u043a\u0430\u043a \u043d\u043e\u0432\u044b\u0439 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442. \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 as T \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u00ab\u0423\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432\u00bb \u043d\u0430 \u0441. 185.<\/p>\n<p>  \u2779 \u041f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u043e\u043f\u0446\u0438\u0439 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 badOptions. TypeScript \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0435\u0433\u043e \u043a\u0430\u043a \u043d\u043e\u0432\u044b\u0439 \u0438, \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442.<\/p>\n<p>  \u277a \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u044f\u0432\u043d\u043e \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u0443\u0435\u043c options \u043a\u0430\u043a Options, \u043e\u0431\u044a\u0435\u043a\u0442, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043d\u0430\u043c\u0438 options, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 TypeScript \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0431\u0430\u0433. \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c options \u0432 new API, \u043d\u043e \u043e\u043d\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043e\u043f\u0446\u0438\u0439 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 options.<\/p>\n<p>  \u042d\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0443\u0447\u0438\u0432\u0430\u0442\u044c. \u042d\u0442\u043e \u043b\u0438\u0448\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430 TypeScript \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0431\u0430\u0433\u043e\u0432. \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u0435 \u043e \u043d\u0438\u0445, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0441\u0442\u0430\u043d\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 TypeScript \u0443\u0437\u043d\u0430\u043b \u043f\u0440\u043e \u0431\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u0436\u0435 \u0418\u0432\u0430\u043d \u2014 \u0441\u0442\u0430\u0440\u043e\u0436\u0438\u043b \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438 \u043f\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0446\u0435\u043d\u0437\u043e\u0440 \u043a\u043e\u0434\u0430 \u2014 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b.<\/p>\n<p>  <b>\u0423\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435<\/b><\/p>\n<p>  TypeScript \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0438\u043f\u043e\u0432. \u041c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 (\u0432\u0440\u043e\u0434\u0435 if, ?, || \u0438 switch) \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0442\u0438\u043f\u043e\u0432 (\u0432\u0440\u043e\u0434\u0435 typeof, instanceof \u0438 in), \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u0442\u043e\u0447\u043d\u044f\u044f \u0442\u0438\u043f\u044b \u043f\u043e \u0445\u043e\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b \u0431\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u0430 \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044f\u0437\u044b\u043a\u043e\u0432.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u0432\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0432 TypeScript API \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b CSS \u0438 \u0432\u0430\u0448 \u043a\u043e\u043b\u043b\u0435\u0433\u0430 \u0445\u043e\u0447\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c HTML-\u044d\u043b\u0435\u043c\u0435\u043d\u0442 width. \u041e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0448\u0438\u0440\u0438\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0437\u0434\u043d\u0435\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0438 \u0441\u0432\u0435\u0440\u0438\u0442\u044c.<\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 CSS \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"javascript\">\/\/ \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0445 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \/\/ \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u0430 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f CSS type Unit = 'cm' | 'px' | '%' \/\/ \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f let units: Unit[] = ['cm', 'px', '%'] \/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0435\u0434. \u0438\u0437\u043c. \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c null, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 function parseUnit(value: string): Unit | null {   for (let i = 0; i &lt; units.length; i++) {     if (value.endsWith(units[i])) {        return units[i] } }      return null }<\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c parseUnit, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0448\u0438\u0440\u0438\u043d\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c. width \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442 \u0447\u0438\u0441\u043b\u043e\u043c (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0430\u0445) \u0438\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0441 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u043c\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f, \u0438\u043b\u0438 null, \u0438\u043b\u0438 undefined.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u0440\u0438\u0431\u0435\u0433\u0430\u0435\u043c \u043a \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044e \u0442\u0438\u043f\u0430:<\/p>\n<pre><code class=\"javascript\">type Width = {      unit: Unit,      value: number } function parseWidth(width: number | string | null | undefined): Width | null { \/\/ \u0415\u0441\u043b\u0438 width \u2014 null \u0438\u043b\u0438 undefined, \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435. if (width == null) { \u2776      return null } \/\/ \u0415\u0441\u043b\u0438 width \u2014 number, \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u044b. if (typeof width === 'number') { \u2777     return {unit: 'px', value: width} } \/\/ \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0438\u0437 width. let unit = parseUnit(width) if (unit) { \u2778 return {unit, value: parseFloat(width)} } \/\/ \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0435\u0440\u043d\u0443\u0442\u044c null. return null \u2779 }<\/code><\/pre>\n<p>  \u2776 TypeScript \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u0430 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 null \u0432 JavaScript \u0432\u0435\u0440\u043d\u0435\u0442 true \u0438 \u0434\u043b\u044f null, \u0438 \u0434\u043b\u044f undefined. \u041e\u043d \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0439\u0434\u0435\u0442, \u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0442, \u0430 \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0442, \u0437\u043d\u0430\u0447\u0438\u0442, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0435 \u043f\u0440\u043e\u0448\u043b\u0430 \u0438 \u0441 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0442\u0438\u043f width \u2014 \u044d\u0442\u043e number | string (\u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c null \u0438\u043b\u0438 undefined). \u041c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u0442\u0438\u043f \u0431\u044b\u043b \u0443\u0442\u043e\u0447\u043d\u0435\u043d \u0438\u0437 number | string | null | undefined \u0432 number | string.<\/p>\n<p>  \u2777 \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 typeof \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0433\u043e \u0442\u0438\u043f. TypeScript \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c typeof \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438: \u0432 \u0432\u0435\u0442\u0432\u0438 if, \u0433\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442, TypeScript \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e width \u2014 \u044d\u0442\u043e number. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u0435\u0441\u043b\u0438 \u044d\u0442\u0430 \u0432\u0435\u0442\u043a\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 return) width \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c string \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u043c\u0441\u044f \u0442\u0438\u043f\u043e\u043c.<\/p>\n<p>  \u2778 \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 parseUnit \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c null, \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u044d\u0442\u043e. TypeScript \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 unit \u0432\u0435\u0440\u043d\u0430, \u0442\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0442\u0438\u043f Unit \u0432 \u0432\u0435\u0442\u043a\u0435 if. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 unit \u043d\u0435\u0432\u0435\u0440\u043d\u0430, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u2014 \u0435\u0435 \u0442\u0438\u043f null (\u0443\u0442\u043e\u0447\u043d\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 Unit | null).<\/p>\n<p>  \u2779 \u0412 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u043c\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c null. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 string \u0434\u043b\u044f width, \u043d\u043e \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f.<br \/>  \u042f \u043f\u0440\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b \u0445\u043e\u0434 \u043c\u044b\u0441\u043b\u0435\u0439 TypeScript \u0432 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430. TypeScript \u043f\u0440\u043e\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u0430\u0448\u0438 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0438 \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u043b\u0438\u0437\u0443\u044f \u0438\u0445 \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0438\u043f\u043e\u0432 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438\u0445 \u0432\u044b\u0432\u043e\u0434\u0430.<\/p>\n<p>  <b>\u0422\u0438\u043f\u044b \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f<\/b><\/p>\n<p>  \u041a\u0430\u043a \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, TypeScript \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0440\u0430\u0431\u043e\u0442\u044b JavaScript \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432, \u0441\u043b\u043e\u0432\u043d\u043e \u0447\u0438\u0442\u0430\u044f \u043c\u044b\u0441\u043b\u0438.<\/p>\n<p>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u043c\u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e UserTextEvent \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u043b \u0442\u0435\u043a\u0441\u0442 &lt;input \/&gt;), \u0430 UserMouseEvent \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043c\u044b\u0448\u0438 (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0434\u0432\u0438\u043d\u0443\u043b \u043c\u044b\u0448\u044c \u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b [100, 200]):<\/p>\n<pre><code class=\"javascript\">type UserTextEvent = {value: string} type UserMouseEvent = {value: [number, number]} type UserEvent = UserTextEvent | UserMouseEvent function handle(event: UserEvent) {      if (typeof event.value === 'string') {          event.value \/\/ string          \/\/ ...          return    }          event.value \/\/ [number, number] }<\/code><\/pre>\n<p>  TypeScript \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 if event.value \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c string (\u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 typeof), \u0442\u043e \u0435\u0441\u0442\u044c event.value \u043f\u043e\u0441\u043b\u0435 \u0431\u043b\u043e\u043a\u0430 if \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u043c [number, number] (\u0438\u0437-\u0437\u0430 return \u0432 \u0431\u043b\u043e\u043a\u0435 if).<\/p>\n<p>  \u041a \u0447\u0435\u043c\u0443 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u0435? \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u043a \u0442\u0438\u043f\u0430\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0439:<\/p>\n<pre><code class=\"javascript\">type UserTextEvent = {value: string, target: HTMLInputElement} type UserMouseEvent = {value: [number, number], target: HTMLElement} type UserEvent = UserTextEvent | UserMouseEvent function handle(event: UserEvent) {     if (typeof event.value === 'string') {         event.value \/\/ string         event.target \/\/ HTMLInputElement | HTMLElement (!!!)         \/\/ ...         return    }   event.value \/\/ [number, number]   event.target \/\/ HTMLInputElement | HTMLElement (!!!) }<\/code><\/pre>\n<p>  \u0425\u043e\u0442\u044f \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0435 \u0438 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0434\u043b\u044f event.value, \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0434\u043b\u044f event.target. \u041f\u043e\u0447\u0435\u043c\u0443? \u041a\u043e\u0433\u0434\u0430 handle \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u0438\u043f\u0430 UserEvent, \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u043c\u0443 \u043b\u0438\u0431\u043e UserTextEvent, \u043b\u0438\u0431\u043e UserMouseEvent, \u2014 \u043d\u0430 \u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0442\u0438\u043f\u0430 UserMouseEvent | UserTextEvent. \u0418 \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0447\u043b\u0435\u043d\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f, TypeScript \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0438 \u043a\u0430\u043a\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d.<\/p>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0438\u043f\u043e\u0432 \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0433\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u0425\u043e\u0440\u043e\u0448\u0438\u0439 \u0442\u0435\u0433:<\/p>\n<ul>\n<li>\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438 \u0442\u043e\u043c \u0436\u0435 \u043c\u0435\u0441\u0442\u0435 \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 \u043f\u043e\u043b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0435\u0441\u043b\u0438 \u0440\u0435\u0447\u044c \u0438\u0434\u0435\u0442 \u043e\u0431 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438\u043b\u0438 \u0442\u043e\u0442 \u0436\u0435 \u0438\u043d\u0434\u0435\u043a\u0441, \u0435\u0441\u043b\u0438 \u0434\u0435\u043b\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0447\u0430\u0449\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/li>\n<li>\u0422\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u0442\u0438\u043f \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430 (\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439 \u043b\u0438\u0442\u0435\u0440\u0430\u043b, \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439, \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438 \u0442. \u0434.). \u041c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u043e\u0432, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u044d\u0442\u043e \u0442\u0438\u043f \u0441\u0442\u0440\u043e\u0447\u043d\u043e\u0433\u043e \u043b\u0438\u0442\u0435\u0440\u0430\u043b\u0430.<\/li>\n<li>\u041d\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u0435\u043d. \u0422\u0435\u0433\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432.<\/li>\n<li>\u0412\u0437\u0430\u0438\u043c\u043e\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 (\u0443\u043d\u0438\u043a\u0430\u043b\u0435\u043d \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f).<\/li>\n<\/ul>\n<p>  \u041e\u0431\u043d\u043e\u0432\u0438\u043c \u0442\u0438\u043f\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e:<\/p>\n<pre><code class=\"javascript\">type UserTextEvent = {type: 'TextEvent', value: string,                                         target: HTMLInputElement} type UserMouseEvent = {type: 'MouseEvent', value: [number, number],                                         target: HTMLElement} type UserEvent = UserTextEvent | UserMouseEvent function handle(event: UserEvent) {    if (event.type === 'TextEvent') {        event.value \/\/ string        event.target \/\/ HTMLInputElement        \/\/ ...        return    }   event.value \/\/ [number, number]   event.target \/\/ HTMLElement }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0443\u0442\u043e\u0447\u043d\u044f\u0435\u043c event \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f (event.type), TypeScript \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 \u0432\u0435\u0442\u043a\u0435 if event \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c UserTextEvent, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0432\u0435\u0442\u043a\u0438 if \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c UserMouseEvent, \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0442\u0435\u0433\u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0438\u043f\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, TypeScript \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u043c\u0438.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 Flux, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 Redux \u0438\u043b\u0438 \u0441 useReducer \u0432 React.<\/p>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0441 \u043a\u043d\u0438\u0433\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0438 \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0437\u0430\u043a\u0430\u0437 \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043d\u0435 \u043d\u0430 <a href=\"https:\/\/www.piter.com\/collection\/soon\/product\/professionalnyy-typescript-razrabotka-masshtabiruemyh-javascript-prilozheniy?_gs_cttl=120&amp;gs_direct_link=1&amp;gsaid=42817&amp;gsmid=29789&amp;gstid=c\">\u0441\u0430\u0439\u0442\u0435 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430<\/a><\/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\/company\/piter\/blog\/518428\/\"> https:\/\/habr.com\/ru\/company\/piter\/blog\/518428\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/518428\/\"><a href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/518428\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/tp\/lg\/92\/tplg92pw4s6bzkegzavvmciugrg.jpeg\" alt=\"image\"><\/a><\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0438! \u041c\u044b \u0441\u0434\u0430\u043b\u0438 \u0432 \u0442\u0438\u043f\u043e\u0433\u0440\u0430\u0444\u0438\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e \u043d\u043e\u0432\u0438\u043d\u043a\u0443 <br \/>  &quot;<a href=\"https:\/\/www.piter.com\/collection\/soon\/product\/professionalnyy-typescript-razrabotka-masshtabiruemyh-javascript-prilozheniy?_gs_cttl=120&amp;gs_direct_link=1&amp;gsaid=42817&amp;gsmid=29789&amp;gstid=c\">\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 TypeScript. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0445 JavaScript-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/a>&quot;. \u0412 \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 JavaScript \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435, \u0443\u0437\u043d\u0430\u044e\u0442, \u043a\u0430\u043a \u043e\u0441\u0432\u043e\u0438\u0442\u044c TypeScript. \u0412\u044b \u043f\u043e\u0439\u043c\u0435\u0442\u0435, \u043a\u0430\u043a TypeScript \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0432 10 \u0440\u0430\u0437 \u043b\u0443\u0447\u0448\u0435 \u0438 \u0441\u043d\u043e\u0432\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c. <\/p>\n<p>  \u0412\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043e\u0442\u0440\u044b\u0432\u043e\u043a \u043e\u0434\u043d\u043e\u0439 \u0433\u043b\u0430\u0432\u044b \u0438\u0437 \u043a\u043d\u0438\u0433\u0438 \u00ab\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0442\u0438\u043f\u044b\u00bb.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-309751","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/309751","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=309751"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/309751\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=309751"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=309751"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=309751"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}