{"id":307983,"date":"2020-08-04T15:01:26","date_gmt":"2020-08-04T15:01:26","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=307983"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2020-08-04T15:01:26","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=307983","title":{"rendered":"\u041a\u043d\u0438\u0433\u0430 \u00ab\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 TypeScript: 62 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u043a\u043e\u0434\u00bb"},"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\/513712\/\"><a href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/513712\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/v2\/ph\/fg\/v2phfgbqlbz4oqdndc0ietkbxx0.jpeg\" align=\"left\" alt=\"image\"><\/a>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0438! \u041a\u043d\u0438\u0433\u0430 \u0414\u044d\u043d\u0430 \u0412\u0430\u043d\u0434\u0435\u0440\u043a\u0430\u043c\u0430 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u0435\u043d\u0430 \u0442\u0435\u043c, \u043a\u0442\u043e \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 JavaScript \u0438 TypeScript. \u0426\u0435\u043b\u044c \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0438 \u2014 \u043d\u0435 \u043e\u0431\u0443\u0447\u0430\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u0430 \u043f\u043e\u043c\u043e\u0447\u044c \u0438\u043c \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c. \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0435\u0435, \u0432\u044b \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 TypeScript, \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u0438\u0445 \u043b\u043e\u0432\u0443\u0448\u0435\u043a \u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0432\u044b\u043a\u0438. \u0412 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u043f\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u00ab\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f\u00bb \u043a\u043d\u0438\u0433\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u0443\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043d\u0438\u0433\u0438<\/h3>\n<p>  \u041a\u043d\u0438\u0433\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u0431\u043e\u0440\u043d\u0438\u043a \u043a\u0440\u0430\u0442\u043a\u0438\u0445 \u044d\u0441\u0441\u0435 (\u043f\u0440\u0430\u0432\u0438\u043b). \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0432 \u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044b (\u0433\u043b\u0430\u0432\u044b), \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u043e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u043e\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043e\u0432\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441 \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c. \u0415\u0441\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0438 \u0441\u043e\u043c\u043d\u0435\u0432\u0430\u0435\u0442\u0435\u0441\u044c, \u043d\u0430\u0434\u043e \u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u0438\u043f\u043e\u0432, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0443 30 (\u00ab\u041d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0439\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u0438\u043f\u0430 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438\u00bb).<br \/>  \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u0432 \u043a\u043d\u0438\u0433\u0435 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043a\u043e\u0434\u0430. \u0414\u0443\u043c\u0430\u044e, \u0432\u044b, \u043a\u0430\u043a \u0438 \u044f, \u0441\u043a\u043b\u043e\u043d\u043d\u044b \u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043d\u0438\u0433\u0438, \u0433\u043b\u044f\u0434\u044f \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438 \u043b\u0438\u0448\u044c \u0432\u0441\u043a\u043e\u043b\u044c\u0437\u044c \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f, \u043d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u044f \u043e\u0442\u0440\u0430\u0437\u0438\u043b \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445.<\/p>\n<p>  \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043e\u0432\u0435\u0442, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c TypeScript \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e. \u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0439\u043c\u0435\u0442\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u043c \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0435. \u041c\u043d\u0435 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0421\u043a\u043e\u0442\u0442\u043e\u043c \u041c\u0430\u0439\u0435\u0440\u0441\u043e\u043c, \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u043a\u043d\u0438\u0433\u0438 \u00ab\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 C++\u00bb: \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u041f\u041e \u0434\u043b\u044f \u0440\u0430\u043a\u0435\u0442 \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u0435\u043d\u0435\u0431\u0440\u0435\u0447\u044c \u0441\u043e\u0432\u0435\u0442\u043e\u043c \u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0438 \u0443\u0442\u0435\u0447\u043a\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0438 \u0440\u0430\u043a\u0435\u0442\u044b \u0432 \u0446\u0435\u043b\u044c. \u041c\u043d\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u043a\u0435\u0442 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 JavaScript, \u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u041f\u041e \u0435\u0441\u0442\u044c \u043d\u0430 \u0442\u0435\u043b\u0435\u0441\u043a\u043e\u043f\u0435 James Webb. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u043e\u043c \u00ab\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c\u00bb. \u0411\u0435\u0433\u043b\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u0435\u0433\u043e, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u043e\u0435. \u041d\u043e \u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<h3>\u041e\u0442\u0440\u044b\u0432\u043e\u043a. \u041f\u0420\u0410\u0412\u0418\u041b\u041e 4. \u041f\u0440\u0438\u0432\u044b\u043a\u0430\u0439\u0442\u0435 \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438<\/h3>\n<p>  JavaScript \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0443\u044e \u0443\u0442\u0438\u043d\u0443\u044e \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e: \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438, \u0442\u043e \u0435\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u043b\u043d\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442. TypeScript \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u043c\u043e\u0434\u0443\u043b\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0448\u0438\u0440\u0435 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0433\u043e \u0432\u0430\u043c. \u0420\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u043d\u0430\u0432\u044b\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043b\u0443\u0447\u0448\u0435 \u0447\u0443\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u0433\u0434\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0435\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438, \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a \u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0438\u043f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 2D:<\/p>\n<pre><code class=\"javascript\">interface Vector2D {    x: number;    y: number; }<\/code><\/pre>\n<p>  \u0412\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u044b:<\/p>\n<pre><code class=\"javascript\">function calculateLength(v: Vector2D) {    return Math.sqrt(v.x * v.x + v.y * v.y); }<\/code><\/pre>\n<p>  \u0438 \u0432\u0432\u043e\u0434\u0438\u0442\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 named:<\/p>\n<pre><code class=\"javascript\">interface NamedVector {    name: string;    x: number;    y: number; }<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f calculateLength \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 NamedVector, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043d\u0435\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 x \u0438 y, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0435\u0441\u044f number. TypeScript \u044d\u0442\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442:<\/p>\n<pre><code class=\"javascript\">const v: NamedVector = { x: 3, y: 4, name: 'Zee' }; calculateLength(v); \/\/ ok, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0432\u0435\u043d 5.<\/code><\/pre>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u043b\u0438 \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 Vector2D \u0438 NamedVector. \u0412\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 calculateLength \u0434\u043b\u044f NamedVector. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0438\u043f\u043e\u0432 TypeScript \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 JavaScript \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 (\u043f\u0440\u0430\u0432\u0438\u043b\u043e 1), \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e NamedVector \u0432\u044b\u0437\u0432\u0430\u0442\u044c calculateLength \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0435\u0433\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u0430 \u0441 Vector2D. \u041e\u0442\u0441\u044e\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u00ab\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f\u00bb.<\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0438 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u0442\u0438\u043f \u0432\u0435\u043a\u0442\u043e\u0440\u0430 3D:<\/p>\n<pre><code class=\"javascript\">interface Vector3D {    x: number;    y: number;    z: number; }<\/code><\/pre>\n<p>  \u0438 \u043d\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u044b (\u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 length \u0440\u0430\u0432\u043d\u043e\u0439 1):<\/p>\n<pre><code class=\"javascript\">function normalize(v: Vector3D) {    const length = calculateLength(v);    return {       x: v.x \/ length,       y: v.y \/ length,       z: v.z \/ length,    }; }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u044b\u0437\u043e\u0432\u0435\u0442\u0435 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443:<\/p>\n<pre><code class=\"javascript\">&gt; normalize({x: 3, y: 4, z: 5}) { x: 0.6, y: 0.8, z: 1 }<\/code><\/pre>\n<p>  \u0427\u0442\u043e \u0436\u0435 \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 TypeScript \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0438\u043b \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435?<\/p>\n<p>  \u0411\u0430\u0433 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e calculateLength \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 2D, \u0430 normalize \u2014 \u0441 3D. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 z \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c, \u0447\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u043d\u0435 \u0443\u043b\u043e\u0432\u0438\u043b \u044d\u0442\u043e\u0433\u043e. \u041f\u043e\u0447\u0435\u043c\u0443 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 calculateLength 3D-\u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u0435\u0435 \u0442\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 2D-\u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438?<br \/>  \u0422\u043e, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0441 named, \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443. \u0412\u044b\u0437\u043e\u0432 calculateLength \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c {x, y, z} \u043d\u0435 \u0432\u044b\u0434\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432 \u043d\u0435 \u0436\u0430\u043b\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u0431\u0430\u0433\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0432 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u0441\u0435 \u0436\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u043b\u0430\u0441\u044c, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u043f\u0440\u0430\u0432\u0438\u043b\u0443 37.<\/p>\n<p>  \u041f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0438, \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438. \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0437\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u043d\u043d\u044b\u0439\u00bb, \u0438\u043b\u0438 \u00ab\u0442\u043e\u0447\u043d\u044b\u0439\u00bb, \u0442\u0438\u043f \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0438\u043f\u043e\u0432 TypeScript. \u041d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0432\u0430\u043c \u044d\u0442\u043e \u0438\u043b\u0438 \u043d\u0435\u0442, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0442\u0438\u043f\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044b.<\/p>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u0430\u043c:<\/p>\n<pre><code class=\"javascript\">function calculateLengthL1(v: Vector3D) {    let length = 0;    for (const axis of Object.keys(v)) {       const coord = v[axis];                        \/\/ ~~~~~~~ \u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0435\u044f\u0432\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f &quot;any&quot;, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e                        \/\/ \u0442\u0438\u043f &quot;string&quot; \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d                        \/\/ \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 &quot;Vector3D&quot;       length += Math.abs(coord);    }    return length; }<\/code><\/pre>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430? \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 axis \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0439 v \u0438\u0437 Vector3D, \u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c x, y \u0438\u043b\u0438 z. \u0410 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044e Vector3D, \u043e\u043d\u0438 \u0432\u0441\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f numbers. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043b\u0438 \u0442\u0438\u043f coord \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u0442\u044c number?<\/p>\n<p>  \u042d\u0442\u043e \u043d\u0435 \u043b\u043e\u0436\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u041c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e Vector3D \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0438\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432. \u0425\u043e\u0442\u044f \u043c\u043e\u0433 \u0431\u044b:<\/p>\n<pre><code class=\"javascript\">const vec3D = {x: 3, y: 4, z: 1, address: '123 Broadway'}; calculateLengthL1(vec3D); \/\/ ok, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 NaN<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 v, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043c\u043e\u0433 \u0438\u043c\u0435\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0442\u043e \u0442\u0438\u043f axis \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f string. \u0423 TypeScript \u043d\u0435\u0442 \u043f\u0440\u0438\u0447\u0438\u043d \u0441\u0447\u0438\u0442\u0430\u0442\u044c v[axis] \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0441\u043b\u043e\u043c. \u041f\u0440\u0438 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438. \u041c\u044b \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435 \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u0435 54, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0431\u043e\u0439\u0434\u0435\u043c\u0441\u044f \u0431\u0435\u0437 \u0446\u0438\u043a\u043b\u043e\u0432:<\/p>\n<pre><code class=\"javascript\">function calculateLengthL1(v: Vector3D) {    return Math.abs(v.x) + Math.abs(v.y) + Math.abs(v.z); }<\/code><\/pre>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432 \u0432 \u043a\u043b\u0430\u0441\u0441\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432:<\/p>\n<pre><code class=\"javascript\">class C {    foo: string;    constructor(foo: string) {        this.foo = foo;    } }  const c = new C('instance of C'); const d: C = { foo: 'object literal' }; \/\/ ok!<\/code><\/pre>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443 d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f C? \u0423 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e foo, \u044f\u0432\u043b\u044f\u044e\u0449\u0435\u0435\u0441\u044f string. \u0415\u0449\u0435 \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c constructor (\u0438\u0437 Object.prototype), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c (\u0445\u043e\u0442\u044f \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043d\u0435\u0433\u043e). \u0418\u0442\u0430\u043a, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\u0441\u0442\u044f\u043c, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 C \u0438 \u0432\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0449\u0443\u044e \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a. \u0412 \u044d\u0442\u043e\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u044f\u0437\u044b\u043a\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 C++ \u0438\u043b\u0438 Java, \u0433\u0434\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0442\u0438\u043f\u0430 C \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e C \u043b\u0438\u0431\u043e \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u0443.<\/p>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<pre><code class=\"javascript\">interface Author {    first: string;    last: string; } function getAuthors(database: PostgresDB): Author[] {    const authorRows = database.runQuery(`SELECT FIRST, LAST FROM                                  AUTHORS`);    return authorRows.map(row =&gt; ({first: row[0], last: row[1]})); }<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0435\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u044e PostgresDB. \u041e\u0434\u043d\u0430\u043a\u043e \u043b\u0443\u0447\u0448\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0443\u0437\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430:<\/p>\n<pre><code class=\"javascript\">interface DB {    runQuery: (sql: string) =&gt; any[]; } function getAuthors(database: DB): Author[] {    const authorRows = database.runQuery(`SELECT FIRST, LAST FROM                                  AUTHORS`);    return authorRows.map(row =&gt; ({first: row[0], last: row[1]})); }<\/code><\/pre>\n<p>  \u0412\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c postgresDB \u0444\u0443\u043d\u043a\u0446\u0438\u0438 getAuthors \u0432 \u0432\u044b\u0432\u043e\u0434, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u043d\u0435\u0439 \u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434 runQuery. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u043e\u0431\u044f\u0437\u044b\u0432\u0430\u0435\u0442 PostgresDB \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 DB. TypeScript \u0441\u0430\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442 \u044d\u0442\u043e.<\/p>\n<p>  \u041f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442:<\/p>\n<pre><code class=\"javascript\">test('getAuthors', () =&gt; {    const authors = getAuthors({       runQuery(sql: string) {          return [['Toni', 'Morrison'], ['Maya', 'Angelou']];       }    });    expect(authors).toEqual([       {first: 'Toni', last: 'Morrison'},       {first: 'Maya', last: 'Angelou'}    ]); });<\/code><\/pre>\n<p>  TypeScript \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442, \u0447\u0442\u043e \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 DB \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0430\u0448\u0438 \u0442\u0435\u0441\u0442\u044b \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u043d\u0443\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0432\u043e\u0434\u0430: \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0412\u0432\u0435\u0434\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044e (DB), \u043c\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u0438 \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0442 \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (PostgresDB).<\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u043d\u0438\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430 \u0447\u0435\u0442\u043a\u043e \u043e\u0431\u0440\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438. \u0411\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435 \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u0435 51.<\/p>\n<blockquote><p>\u0421\u041b\u0415\u0414\u0423\u0415\u0422 \u0417\u0410\u041f\u041e\u041c\u041d\u0418\u0422\u042c<\/p>\n<p>  JavaScript \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u0443\u0442\u0438\u043d\u0443\u044e \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e, \u0430 TypeScript \u0435\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u0430\u0448\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c, \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u0430\u0445. \u0422\u0438\u043f\u044b \u0432 TypeScript \u043d\u0435 \u0431\u044b\u0432\u0430\u044e\u0442 \u0437\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u0418\u043c\u0435\u0439\u0442\u0435 \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0447\u0438\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435 \u0442\u043e\u0442 \u043e\u0431\u0440\u0430\u0437\u0435\u0446 \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u0430\u043a\u043e\u0439 \u043e\u0436\u0438\u0434\u0430\u043b\u0438.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u0443\u044e \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p><\/blockquote>\n<p>  <\/p>\n<h3>\u041f\u0420\u0410\u0412\u0418\u041b\u041e 5. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u044c\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 any<\/h3>\n<p>  \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0438\u043f\u043e\u0432 \u0432 TypeScript \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0439 \u0438 \u0432\u044b\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u0439. \u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0430 \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0438\u043f\u044b \u0432 \u043a\u043e\u0434 \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c, \u0430 \u0432\u044b\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u2014 \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u0438\u043f\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e. \u041a\u043b\u044e\u0447\u043e\u043c \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0442\u0438\u043f any:<\/p>\n<pre><code class=\"javascript\">   let age: number;    age = '12'; \/\/ ~~~ \u0422\u0438\u043f '&quot;12&quot;' \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0442\u0438\u043f\u0430 'number'.    age = '12' as any; \/\/ ok<\/code><\/pre>\n<p>  \u041c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0430\u0432, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0443, \u043d\u043e \u0435\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432 as any. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 TypeScript, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u043c\u0430\u043d\u0447\u0438\u0432\u044b\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 any \u0438\u043b\u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0439 as any \u043f\u0440\u0438 \u043d\u0435\u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u043e\u0448\u0438\u0431\u043a\u0438, \u043d\u0435\u0434\u043e\u0432\u0435\u0440\u0438\u0438 \u043a \u043c\u043e\u0434\u0443\u043b\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u043b\u0438 \u043d\u0435\u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432. \u041d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e any \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 TypeScript, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<p>  <b>\u0421\u043d\u0438\u0436\u0430\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430<\/b><\/p>\n<p>  \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443, age \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f number. \u041d\u043e any \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u0442\u0440\u043e\u043a\u0443. \u041c\u043e\u0434\u0443\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e (\u0432\u0435\u0434\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0432\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0438), \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0443\u0442\u0430\u043d\u0438\u0446\u044b.<\/p>\n<pre><code class=\"javascript\">age += 1; \/\/ ok. \u041f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f age &quot;121&quot;.<\/code><\/pre>\n<p>  <b>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0440\u0443\u0448\u0430\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u044f<\/b><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0432\u044b \u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 \u043e\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u043f\u0440\u0438 \u0432\u044b\u0432\u043e\u0434\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">function calculateAge(birthDate: Date): number {    \/\/ ... }  let birthDate: any = '1990-01-19'; calculateAge(birthDate); \/\/ ok<\/code><\/pre>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u0430\u0442\u044b \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f birthDate \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c Date, \u0430 \u043d\u0435 string. \u0422\u0438\u043f any \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0435\u0435\u0441\u044f \u043a calculateAge. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u043c, \u0442\u0430\u043a \u043a\u0430\u043a JavaScript \u0438\u043c\u0435\u0435\u0442 \u0441\u043a\u043b\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u043a \u043d\u0435\u044f\u0432\u043d\u043e\u0439 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u043e\u0432. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e string \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043c, \u0433\u0434\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f number, \u043d\u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u0434\u0430\u0441\u0442 \u0441\u0431\u043e\u0439 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>  <b>\u0418\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u0441\u043b\u0443\u0436\u0431\u044b<\/b><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u0442\u0438\u043f, \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u0441\u043b\u0443\u0436\u0431\u044b TypeScript \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0430\u0432\u0442\u043e\u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443 \u0438 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u0443\u044e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e (\u0440\u0438\u0441. 1.3).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/el\/cq\/81\/elcq81pbeulg3lyy8fmzcar0tx4.png\" alt=\"image\"><\/div>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c \u0442\u0438\u043f any, \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432\u0441\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e (\u0440\u0438\u0441. 1.4).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/on\/xt\/ts\/onxttsb1d_rdf7ehb-f1yqe0uvy.png\" alt=\"image\"><\/div>\n<p>  \u0418 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u043e\u0436\u0435. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0438\u043f Person \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438:<\/p>\n<pre><code class=\"javascript\">interface Person {    first: string;    last: string; }  const formatName = (p: Person) =&gt; `${p.first} ${p.last}`; const formatNameAny = (p: any) =&gt; `${p.first} ${p.last}`;<\/code><\/pre>\n<p>  \u0442\u043e\u0433\u0434\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c first \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c Rename Symbol \u0434\u043b\u044f \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0432 firstName (\u0440\u0438\u0441. 1.5 \u0438 \u0440\u0438\u0441. 1.6).<\/p>\n<p>  \u042d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e formatName, \u043d\u043e \u043d\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 any:<\/p>\n<pre><code class=\"javascript\">interface Person {    first: string;    last: string; }  const formatName = (p: Person) =&gt; `${p.firstName} ${p.last}`; const formatNameAny = (p: any) =&gt; `${p.first} ${p.last}`;<\/code><\/pre>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/qc\/db\/el\/qcdbel2n8lf2iuasmk_tegvppjc.png\" alt=\"image\"><\/div>\n<p>  \u00bb \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 \u043d\u0430 <a href=\"https:\/\/www.piter.com\/collection\/best\/product\/effektivnyy-typescript-62-sposoba-uluchshit-kod?_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><br \/>  \u00bb <a href=\"https:\/\/storage.piter.com\/upload\/contents\/978544611623\/978544611623_X.pdf\">\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/a><br \/>  \u00bb <a href=\"https:\/\/storage.piter.com\/upload\/contents\/978544611623\/978544611623_p.pdf\">\u041e\u0442\u0440\u044b\u0432\u043e\u043a<\/a><\/p>\n<p>  \u0414\u043b\u044f \u0425\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u0439 \u0441\u043a\u0438\u0434\u043a\u0430 25% \u043f\u043e \u043a\u0443\u043f\u043e\u043d\u0443 \u2014 <b>TypeScript<\/b><\/p>\n<p>  \u041f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u043f\u043b\u0430\u0442\u044b \u0431\u0443\u043c\u0430\u0436\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043d\u0438\u0433\u0438 \u043d\u0430 e-mail \u0432\u044b\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043a\u043d\u0438\u0433\u0430.<\/p><\/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\/513712\/\"> https:\/\/habr.com\/ru\/company\/piter\/blog\/513712\/<\/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\/513712\/\"><a href=\"https:\/\/habr.com\/ru\/company\/piter\/blog\/513712\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/v2\/ph\/fg\/v2phfgbqlbz4oqdndc0ietkbxx0.jpeg\" align=\"left\" alt=\"image\"><\/a>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440\u043e\u0436\u0438\u0442\u0435\u043b\u0438! \u041a\u043d\u0438\u0433\u0430 \u0414\u044d\u043d\u0430 \u0412\u0430\u043d\u0434\u0435\u0440\u043a\u0430\u043c\u0430 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u0435\u043d\u0430 \u0442\u0435\u043c, \u043a\u0442\u043e \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 JavaScript \u0438 TypeScript. \u0426\u0435\u043b\u044c \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0438 \u2014 \u043d\u0435 \u043e\u0431\u0443\u0447\u0430\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u0430 \u043f\u043e\u043c\u043e\u0447\u044c \u0438\u043c \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c. \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0435\u0435, \u0432\u044b \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 TypeScript, \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u0438\u0445 \u043b\u043e\u0432\u0443\u0448\u0435\u043a \u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0432\u044b\u043a\u0438. \u0412 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u043f\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0443\u0442\u0435\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u00ab\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f\u00bb \u043a\u043d\u0438\u0433\u0430 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442, \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043f\u0443\u0442\u0435\u0439 \u043b\u0443\u0447\u0448\u0435 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443.  <\/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-307983","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/307983","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=307983"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/307983\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=307983"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=307983"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=307983"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}