{"id":2129,"date":"2019-10-21T16:39:42","date_gmt":"2019-10-21T14:39:42","guid":{"rendered":"https:\/\/www.thecodecampus.de\/blog\/?p=2129"},"modified":"2023-12-20T19:35:18","modified_gmt":"2023-12-20T18:35:18","slug":"new-typescript-3-7-beta-features","status":"publish","type":"post","link":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/","title":{"rendered":"New Typescript 3.7 Beta Features"},"content":{"rendered":"<p>With the TS 3.7 Beta release the version is now feature-complete and brings some new additions to the playingfield. In this post we want to highlight two new features, which can be helpful to save code and make it less error prone.<\/p>\n<h3>Optional Chaining<\/h3>\n<p>First we want to have alook at a common situation: retrieving information from a third-party API. As an example we assume, that we are a data hungry social media reliant data processing company. Our goal is to retrieve the interests of persons with an account at a social media platform. We obviously paid lots of money to sniff in the lifes of unaware users, so we want to go into detail as much as possible.<\/p>\n<p style=\"text-align: left;\">Well this should not bother you as a developer too much. So we get to work and retrieve the first account details of a man known as <em>Darth Vader<\/em>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2131 aligncenter\" src=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708.jpg\" alt=\"\" width=\"269\" height=\"151\" srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708.jpg 1536w, https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708-300x169.jpg 300w, https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708-768x432.jpg 768w, https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708-1024x576.jpg 1024w\" sizes=\"auto, (max-width: 269px) 100vw, 269px\" \/><\/p>\n<pre class=\"\">darthVader = {\r\n    name: \"Darth Vader\",\r\n    adress: {\r\n        street:\"Galaxy Street\",\r\n        nr:2,\r\n        city: \"Tatooine\",\r\n        state: \"Galaxis\"\r\n        },\r\n    quote: {\r\n        text: \"No, I am your father!\",\r\n        from: \"me\"\r\n    },\r\n    interests:{\r\n         food: \"vitapaste\",\r\n         sports: \"laser sword\",\r\n         other:\"conquering other worlds\"\r\n    }\r\n};<\/pre>\n<p>Following the API structure the code on our side looks like this:<\/p>\n<pre class=\"\">const hobbies = apiResult.interests.sports<\/pre>\n<p>On to the next account named <em>Slothy<\/em>. Well, he&#8217;s more of a laid back fellar:<\/p>\n<p><a href=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/sloth1-868786.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2130\" src=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/sloth1-868786.jpg\" alt=\"\" width=\"278\" height=\"165\" srcset=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/sloth1-868786.jpg 590w, https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/sloth1-868786-300x178.jpg 300w\" sizes=\"auto, (max-width: 278px) 100vw, 278px\" \/><\/a><\/p>\n<pre class=\"\">slothy= {\r\n    name: \"Slothy\",\r\n    adress: {\r\n        street:\"Tree\",\r\n        nr:12323,\r\n        city: \"Amazonas\",\r\n        state: \"Brasil\"\r\n        },\r\n    quote: {\r\n        text: \"zzzzhhhhhhhh\",\r\n        from: \"me\"\r\n    },\r\n};<\/pre>\n<p>We assume he has at least some hobbies as everyone does and the API suggests it. So we get the data:<\/p>\n<pre class=\"\">const hobbies = apiResults.interests.sports\r\n\/\/ Uncaught TypeError: Cannot read property 'interests' of null<\/pre>\n<p>But as we can see in the profile of <em>Slothy,<\/em> he does not have any hobbies &#8211; surprisingly enough. So we made an assumption about the data-structure being always the same. This is dangerous though as we have the risk on our side, if there is variations. So what&#8217;s the solution?<\/p>\n<p>There is more than one option to catch that error, where a common one is the following:<\/p>\n<pre class=\"decode-attributes:false lang:js decode:true\">if( apiResults.interests.sports &amp;&amp; apiResults.interests.sports){\r\n const hobbies = apiResults.interests.sports \r\n}<\/pre>\n<p>In Typescript 3.7 Beta we now have a more elegant way of dealing with this cases &#8211;&gt; the optional chaining operator. This approach is not new, as it is being used in several languages under various declarations as <em class=\"pc\">safe navigation operator<\/em>,\u00a0<em class=\"pc\">existential operator, null-conditional operator<\/em>, or\u00a0<em class=\"pc\">null propagation operator. <\/em>So going back to our example the result will either give back a<em class=\"pc\"> string <\/em>in case the information is present, or <em class=\"pc\">undefined <\/em>for a missing property whith the value <em>null<\/em> or <em>undefined<\/em>.<\/p>\n<pre class=\"\">const hobbies = apiResults?.interests?.sports\r\n\/\/-- string | undefined<\/pre>\n<h3>Nullish Coalescing<\/h3>\n<p>The second feature going hand-in-hand with optional chaining, will find its way from ECMAScript to the new Typescript version &#8211;&gt; nullish coalescing.<\/p>\n<p>Let&#8217;s expand the used example of a data request from above. Now every account in the social network has the possibility to set a privacy level with the granularity of five steps: 0% for no privacy, 25%, 50%, 75%, 100% for the most strict privacy rules. We as the data processing customer are just able to use data of a privacy level lower than 25%. To meet the regulations, we need to check the value of each account and just proceed if the privacy rule is 0% (Yes, this should be the job of the social platform. But nevermind, it&#8217;s an example). If the account owner specified no privacy rule, we are obliged to assume a default of 25% or more, which forbids us to use the account.<\/p>\n<p>It is possible to use the logical OR operator || for supplying a default value, if localPrivacy is not set.<\/p>\n<pre class=\"\">function checkPrivacyLevel() {\r\n    let privacyLevel=apiResponse.privacyLevel || 0.25\r\n}<\/pre>\n<p>What&#8217;s the problem?<\/p>\n<p>The solution has a severe shortcoming, which is obvious in our example use case. Imagine the case of Darth Vader being a little more protective with his data. So he sets his privacyLevel=0. In the solution mentioned above, this would lead to a falsy statement. So we use the default value of 25%. In this case we are free to go and use his data, even though we shouldn&#8217;t be allowed to. This is because the values of\u00a0 0, NaN and &#8220;&#8221; are being treated as falsy. Until now, in effort to avoid this behaviour one had to use the ternary operator:<\/p>\n<pre class=\"lang:js decode:true\">let privacyLevel=(apiResponse.privacyLevel!==null  \r\n    &amp;&amp; apiResponse.privacyLevel!==undefined)?\r\n    apiResponse.privacyLevel:\r\n    0,25;\r\n<\/pre>\n<p>Even though this works, its not a very elegant way. To combine the effects of the OR and the ternary operator, the new nullish coalescing operator is being integrated in Typescript 3.7 Beta. It has the syntax of the OR operator using ?? instead of ||. And behaves like the ternary operator as it interprets 0 to be true.<\/p>\n<pre class=\"\">function checkPrivacyLevel() {\r\n    let privacyLevel=apiResponse.privacyLevel ?? 0.25\r\n}\r\n\/\/ -- if apiResponse.privacyLevel=0 then privacyLevel=0<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>With the TS 3.7 Beta release the version is now feature-complete and brings some new additions to the playingfield. In this post we want to highlight two new features, which can be helpful to save code and make it less error prone. Optional Chaining First we want to have alook at a common situation: retrieving [&#8230;]<br \/><a class=\"meta-big\" href=\"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/\"> READ MORE<\/a><\/p>\n","protected":false},"author":23,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60],"tags":[113,116,115,114,117],"class_list":["post-2129","post","type-post","status-publish","format-standard","hentry","category-typescript","tag-features","tag-optional-chaining","tag-ts-3-7-beta","tag-typscript","tag-ullish-coalescing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>New Typescript 3.7 Beta Features - Web Development Blog<\/title>\n<meta name=\"description\" content=\"Discover TypeScript 3.7 Beta&#039;s powerful features! Elevate coding with new enhancements. Explore advanced tools and boost development efficiency now.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"New Typescript 3.7 Beta Features - Web Development Blog\" \/>\n<meta property=\"og:description\" content=\"Discover TypeScript 3.7 Beta&#039;s powerful features! Elevate coding with new enhancements. Explore advanced tools and boost development efficiency now.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Development tips and tricks - theCodeCampus Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-21T14:39:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-20T18:35:18+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708.jpg\" \/>\n<meta name=\"author\" content=\"Janik Kessler\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Janik Kessler\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/\"},\"author\":{\"name\":\"Janik Kessler\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/0dda62aeb98f2e9a89c2438b6f990101\"},\"headline\":\"New Typescript 3.7 Beta Features\",\"datePublished\":\"2019-10-21T14:39:42+00:00\",\"dateModified\":\"2023-12-20T18:35:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/\"},\"wordCount\":676,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/EP3_IA_95931-1536x864-904726454708.jpg\",\"keywords\":[\"features\",\"optional chaining\",\"TS 3.7 Beta\",\"typscript\",\"ullish coalescing\"],\"articleSection\":[\"TypeScript\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/\",\"name\":\"New Typescript 3.7 Beta Features - Web Development Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/EP3_IA_95931-1536x864-904726454708.jpg\",\"datePublished\":\"2019-10-21T14:39:42+00:00\",\"dateModified\":\"2023-12-20T18:35:18+00:00\",\"description\":\"Discover TypeScript 3.7 Beta's powerful features! Elevate coding with new enhancements. Explore advanced tools and boost development efficiency now.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/EP3_IA_95931-1536x864-904726454708.jpg\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/EP3_IA_95931-1536x864-904726454708.jpg\",\"width\":1536,\"height\":864},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/new-typescript-3-7-beta-features\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"New Typescript 3.7 Beta Features\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"name\":\"Web Development tips and tricks - theCodeCampus Blog\",\"description\":\"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#organization\",\"name\":\"theCodeCampus\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/TCC-Logo-Bildmarke-quadratisch.jpg\",\"width\":156,\"height\":156,\"caption\":\"theCodeCampus\"},\"image\":{\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/#\\\/schema\\\/person\\\/0dda62aeb98f2e9a89c2438b6f990101\",\"name\":\"Janik Kessler\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/janik-kessler-tcc-author-96x96.png\",\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/janik-kessler-tcc-author-96x96.png\",\"contentUrl\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/janik-kessler-tcc-author-96x96.png\",\"caption\":\"Janik Kessler\"},\"description\":\"Hi, I'm Janik. I'm a web development enthusiast and love to share my experiences. As a software trainer and engineer, I always seek to exchange ideas with other developers. I've been part of the theCodeCampus team since 2019 and have had the opportunity to meet many exciting engineers, learning a great deal from their experiences.\",\"sameAs\":[\"https:\\\/\\\/thecodecampus.de\\\/ueber-uns\\\/trainer\\\/janik-kessler\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/janik-kessler-615034233\\\/\"],\"url\":\"https:\\\/\\\/www.thecodecampus.de\\\/blog\\\/author\\\/jhorst\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"New Typescript 3.7 Beta Features - Web Development Blog","description":"Discover TypeScript 3.7 Beta's powerful features! Elevate coding with new enhancements. Explore advanced tools and boost development efficiency now.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/","og_locale":"en_US","og_type":"article","og_title":"New Typescript 3.7 Beta Features - Web Development Blog","og_description":"Discover TypeScript 3.7 Beta's powerful features! Elevate coding with new enhancements. Explore advanced tools and boost development efficiency now.","og_url":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/","og_site_name":"Web Development tips and tricks - theCodeCampus Blog","article_published_time":"2019-10-21T14:39:42+00:00","article_modified_time":"2023-12-20T18:35:18+00:00","og_image":[{"url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708.jpg","type":"","width":"","height":""}],"author":"Janik Kessler","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Janik Kessler","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/#article","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/"},"author":{"name":"Janik Kessler","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/0dda62aeb98f2e9a89c2438b6f990101"},"headline":"New Typescript 3.7 Beta Features","datePublished":"2019-10-21T14:39:42+00:00","dateModified":"2023-12-20T18:35:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/"},"wordCount":676,"commentCount":0,"publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/#primaryimage"},"thumbnailUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708.jpg","keywords":["features","optional chaining","TS 3.7 Beta","typscript","ullish coalescing"],"articleSection":["TypeScript"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/","url":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/","name":"New Typescript 3.7 Beta Features - Web Development Blog","isPartOf":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/#primaryimage"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/#primaryimage"},"thumbnailUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708.jpg","datePublished":"2019-10-21T14:39:42+00:00","dateModified":"2023-12-20T18:35:18+00:00","description":"Discover TypeScript 3.7 Beta's powerful features! Elevate coding with new enhancements. Explore advanced tools and boost development efficiency now.","breadcrumb":{"@id":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/#primaryimage","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708.jpg","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2019\/10\/EP3_IA_95931-1536x864-904726454708.jpg","width":1536,"height":864},{"@type":"BreadcrumbList","@id":"https:\/\/www.thecodecampus.de\/blog\/new-typescript-3-7-beta-features\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.thecodecampus.de\/blog\/"},{"@type":"ListItem","position":2,"name":"New Typescript 3.7 Beta Features"}]},{"@type":"WebSite","@id":"https:\/\/www.thecodecampus.de\/blog\/#website","url":"https:\/\/www.thecodecampus.de\/blog\/","name":"Web Development tips and tricks - theCodeCampus Blog","description":"Tips, tricks, and experiences about developing web and mobile applications with Angular, TypeScript, and Testing.","publisher":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.thecodecampus.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.thecodecampus.de\/blog\/#organization","name":"theCodeCampus","url":"https:\/\/www.thecodecampus.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/01\/TCC-Logo-Bildmarke-quadratisch.jpg","width":156,"height":156,"caption":"theCodeCampus"},"image":{"@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.thecodecampus.de\/blog\/#\/schema\/person\/0dda62aeb98f2e9a89c2438b6f990101","name":"Janik Kessler","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/09\/janik-kessler-tcc-author-96x96.png","url":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/09\/janik-kessler-tcc-author-96x96.png","contentUrl":"https:\/\/www.thecodecampus.de\/blog\/wp-content\/uploads\/2024\/09\/janik-kessler-tcc-author-96x96.png","caption":"Janik Kessler"},"description":"Hi, I'm Janik. I'm a web development enthusiast and love to share my experiences. As a software trainer and engineer, I always seek to exchange ideas with other developers. I've been part of the theCodeCampus team since 2019 and have had the opportunity to meet many exciting engineers, learning a great deal from their experiences.","sameAs":["https:\/\/thecodecampus.de\/ueber-uns\/trainer\/janik-kessler","https:\/\/www.linkedin.com\/in\/janik-kessler-615034233\/"],"url":"https:\/\/www.thecodecampus.de\/blog\/author\/jhorst\/"}]}},"_links":{"self":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/2129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/comments?post=2129"}],"version-history":[{"count":28,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/2129\/revisions"}],"predecessor-version":[{"id":2716,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/posts\/2129\/revisions\/2716"}],"wp:attachment":[{"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/media?parent=2129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/categories?post=2129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.thecodecampus.de\/blog\/wp-json\/wp\/v2\/tags?post=2129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}