{"id":26565,"date":"2020-07-15T00:00:00","date_gmt":"2020-07-14T22:00:00","guid":{"rendered":"https:\/\/blexin.com\/angular-10-cose-cambiato-negli-ultimi-tre-mesi\/"},"modified":"2021-05-20T18:24:00","modified_gmt":"2021-05-20T16:24:00","slug":"angular-10-what-has-changed-in-the-last-three-months","status":"publish","type":"post","link":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/","title":{"rendered":"Angular 10: what has changed in the last three months?"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"26556\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/attachment\/530f48c9-8018-4fc7-b29a-8473a61a2888-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&amp;ssl=1\" data-orig-size=\"1024,608\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"530f48c9-8018-4fc7-b29a-8473a61a2888\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-26556\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A few months after the version 9 release (described&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.blexin.com\/en-US\/Article\/Blog\/Angular-9-what-changes-and-why-use-it-81\" target=\"_blank\">here<\/a>), the Angular team surprised us with the version 10, trying to bridge the delays and promising the release of version 11 for the end of fall.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"638\" data-attachment-id=\"26558\" data-permalink=\"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/attachment\/image01-1-2\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-1.png?fit=1220%2C760&amp;ssl=1\" data-orig-size=\"1220,760\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"image01-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-1.png?fit=1024%2C638&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-1.png?resize=1024%2C638&#038;ssl=1\" alt=\"\" class=\"wp-image-26558\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-1-1024x638.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-1-980x610.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2020\/12\/image01-1-480x299.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In its development dependencies, Typescript moved to version 3.9.5. In my opinion, there is a tendency to give little importance to the detail of the version of a language, but it is undeniable that an average developer learned Typescript 3-4 years ago, when the ng cli used a 2.something version. Today\u2019s language is entirely different and more sophisticated and people should study it again and fill the gap. The risk is to consult Angular documentation, find a bizarre copy snippet, and copy it into your project with no idea of what\u2019s going on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I want to show you some examples (not related to the 3.9.4 version of Typescript).<br>Let\u2019s start from the two following interfaces:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nexport interface Student {\n    id: number;\n    age: number;\n    name: string;\n    surname: string;\n}\n  \nexport interface Worker {\n    companyId: number;\n    salary: number;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">We can define a new type that can be a Student or a Worker!<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nexport type MyUnionType = Student | Worker;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">What happens if we need to know if a variable is a Student or a Worker? We can write a function returning a type predicate:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nisStudent(person: MyUnionType): person is Student {\n\u00a0\u00a0\u00a0\u00a0return (person as Student).name !== undefined;\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">and then using it in the code<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nif (this.isStudent(person)) {\n\u00a0\u00a0\u00a0\u00a0console.log(person.name);\n} else {\n\u00a0\u00a0\u00a0\u00a0\/\/ ....\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">It\u2019s interesting to point out that in the<strong>&nbsp;else<\/strong>&nbsp;we have a Worker explicitly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We can also define a type as a combination of two or more types.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nexport type MyIntersectionType = Student &amp; Worker;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">There are other more advanced generic types. Consider, for example, Partial&lt;T&gt;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose to writing a function updating a Worker:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nconst updateWorker = (id: number, worker: Worker) =&gt; {};\nupdateWorker(1, { salary: 1000});\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">This code does not compile because companyId lacks in the object we passed to the function. We can correct the code in the following way:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nconst updateWorker = (id: number, worker: Partial&lt;Worker&gt;) =&gt; {};\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">and the error is removed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We also have other utility types, such as Record&lt;K,T&gt;. Let\u2019s define an alias type called<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Headquarter and associate to each headquarter a Worker.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nexport type Headquarter = &#039;Napoli&#039; | &#039;Roma&#039; | &#039;Milano&#039;;\nconst x: Record&lt;Headquarter, Worker&gt; = {\n\u00a0\u00a0\u00a0\u00a0Napoli: { companyId: 3, salary: 3000 },\n\u00a0\u00a0\u00a0\u00a0Roma: { companyId: 4, salary: 3000 },\n\u00a0\u00a0\u00a0\u00a0Milano: { companyId: 5, salary: 3000 },\n};\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">What if I wanted to create a new type starting from Student but choosing only some of its properties?<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\nexport type StudentPreview = Pick&lt;Student, &#039;id&#039; | &#039;surname&#039;&gt;;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">If you are interested in learning more about Composition in Typescript, I suggest the following&nbsp;<a href=\"https:\/\/www.youtube.com\/watch?v=Fgcu_iB2X04\" target=\"_blank\" rel=\"noreferrer noopener\">video<\/a>, besides the official documentation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s come back to Angular 10 with a new option available for the command ng new creating a new project: ng new &#8211;script.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We not only improve the maintainability of the project by finding bugs as quickly as possible, but, above all, we allow the CLI to perform advanced optimizations on our app. In details:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>the strict mode in Typescript is enabled ( bye-bye to variables any)<\/li><li>the type check inside the template is enabled<\/li><li>more restrictive linting rules are enabled (hoping you don\u2019t send in review some code full of ignored suggestions)<\/li><li>bundle budget default values have been reduced by 75%<\/li><li>our app is configured as side-effect free improving the tree-shaking algorithm efficiency<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The bundle budget is a little-known feature of Angular that allows you to set a threshold on the size of the application bundles. Ultimately, we want a warning or that the compilation will fail if we have exceeded that limit. Budgets are set in the angular.json file. The template created by the CLI sets the following values:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n&quot;budgets&quot;: &#x5B;\n    {\n        &quot;type&quot;: &quot;initial&quot;,\n         &quot;maximumWarning&quot;: &quot;500kb&quot;,\n         &quot;maximumError&quot;: &quot;1mb&quot;\n    },\n    {\n         &quot;type&quot;: &quot;anyComponentStyle&quot;,\n         &quot;maximumWarning&quot;: &quot;2kb&quot;,\n         &quot;maximumError&quot;: &quot;4kb&quot;\n    }\n]\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/angular\/angular-cli\/blob\/master\/docs\/documentation\/stories\/budgets.md\" target=\"_blank\" rel=\"noreferrer noopener\">Here<\/a>&nbsp;you can find the full documentation about this feature.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Typescript configuration available in a new project has changed. Now we have a new file called tsconfig.base.json, which is added to tsconfig.json, tsconfig.app.json, and tsconfig.spec.json. The idea is to give more support to editors and build tools.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this version the tsconfig.json is emptied and becomes only a container of file paths:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n\/*\n This is a &quot;Solution Style&quot; tsconfig.json file, and is used by editors and TypeScript\u2019s language server to improve development experience.\n It is not intended to be used to perform a compilation.\n  \n To learn more about this file see: https:\/\/angular.io\/config\/solution-tsconfig.\n*\/\n{\n  &quot;files&quot;: &#x5B;],\n  &quot;references&quot;: &#x5B;\n   {\n    &quot;path&quot;: &quot;.\/tsconfig.app.json&quot;\n   },\n   {\n    &quot;path&quot;: &quot;.\/tsconfig.spec.json&quot;\n   },\n   {\n    &quot;path&quot;: &quot;.\/e2e\/tsconfig.json&quot;\n   }\n  ]\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The term &#8220;Solution Style&#8221;, used in the comment, suggests classic IDEs for code development. It will, therefore, be interesting to see if the Angular team will go this way. In this configuration, the application code (managed by tsconfig.app.json) is clearly isolated from the testing code (managed by tsconfig.spec.json). Most of the configuration code is written in tsconfig.base.json (where we note the strict option we mentioned earlier). All paths and files to be included are in the tsconfig.app.json file.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\n\/* To learn more about this file see: https:\/\/angular.io\/config\/tsconfig. *\/\n{\n &quot;extends&quot;: &quot;.\/tsconfig.base.json&quot;,\n &quot;compilerOptions&quot;: {\n &quot;outDir&quot;: &quot;.\/out-tsc\/app&quot;,\n  &quot;types&quot;: &#x5B;]\n},\n &quot;files&quot;: &#x5B;\n   &quot;src\/main.ts&quot;,\n   &quot;src\/polyfills.ts&quot;\n ],\n &quot;include&quot;: &#x5B;\n   &quot;src\/**\/*.d.ts&quot;\n ]\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">The list of browsers available in the file (.browserslistrc) has been updated, excluding the oldest and least used ones.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>last 1 Chrome version<\/li><li>last 1 Firefox version<\/li><li>last 2 Edge major versions<\/li><li>last 2 Safari major version<\/li><li>last 2 iOS major versions<\/li><li>Firefox ESR<\/li><li>not IE 9-10 # Angular support for IE 9-10 has been deprecated and will be removed as of Angular v11. To opt-in, remove the &#8216;not&#8217; prefix on this line.<\/li><li>not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the &#8216;not&#8217; prefix on this line.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">We can check the full list launching the command&nbsp;<code>npx browserslist<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>chrome 83<\/li><li>edge 83<\/li><li>edge 81<\/li><li>firefox 78<\/li><li>firefox 68<\/li><li>ios_saf 13.4-13.5<\/li><li>ios_saf 13.3<\/li><li>ios_saf 13.2<\/li><li>ios_saf 13.0-13.1<\/li><li>ios_saf 12.2-12.4<\/li><li>ios_saf 12.0-12.1<\/li><li>safari 13.1<\/li><li>safari 13<\/li><li>safari 12.1<\/li><li>safari 12<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Did you expect a longer list? The most important side effect is that ES5 builds are disabled by default. To enable the ES5 build on an older browser (e.g., Internet Explorer), the .browserlistrc file must first be updated.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Classes using Angular features without specifying a decorator (e.g., @Component, @Directive, @Module) don&#8217;t compile with Ivy. For example, consider the following code snippet (<a href=\"https:\/\/gist.github.com\/dsebastien\/2cad025791a83a4402c6177fb8043877#file-ivy-no-no-ts\" target=\"_blank\" rel=\"noreferrer noopener\">source<\/a>)<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\nclass Base {\n\u00a0\u00a0@Input()\n\u00a0\u00a0foo: string;\n}\n\u00a0\u00a0\n@Directive(...)\nclass Dir extends Base {\n\u00a0\u00a0ngOnChanges(): void {}\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">When an Angular decorator is missing on a class, the Ivy compiler does not add all the extra code for dependency injection. As described in the&nbsp;<a href=\"https:\/\/next.angular.io\/guide\/migration-undecorated-classes\" target=\"_blank\" rel=\"noreferrer noopener\">official documentation<\/a>, the daughter class will inherit from the father a builder without all the necessary additional information. Therefore, when Angular tries to instantiate it, it will fail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the View Engine, the compiler has a global set of data and can, therefore, retrieve the missing information. But the Ivy compiler processes each directive in isolation (to be faster) and, therefore, a global support, which could help it, lacks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is big news about support for Bazel, a build tool used in Google that has been made available in preview in Angular for more than a year. The news is that Bazel will NEVER be the build tool in Angular and that the project has been completely shelved. An&nbsp;<a href=\"https:\/\/dev.to\/bazel\/angular-bazel-leaving-angular-labs-51ja\" target=\"_blank\" rel=\"noreferrer noopener\">article<\/a>&nbsp;by Alex Eagle explains in detail what happened. I find the phrase \u201cAngular apps don&#8217;t suffer from the problems that Bazel tries to solve\u201d meaningful. Therefore it is useless to introduce new complexity and tools in the build process in order not to obtain significant improvements.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Angular Package Format used not only in the additional packages (for example Angular Material) but also in those contained in the whole @angular namespace (for example, @angular\/core, @angular\/ forms etc.) has been emptied of all the bundles that previously they were needed for ES5 compilation. This results in a 119 MB reduction in the download triggered by npm install.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What else is left compared to version 9? The resolution of over 700 issues related not only to the base library but also to the tooling part (the ng cli). The link that describes how to migrate an application to version 10 is the&nbsp;<a href=\"https:\/\/next.angular.io\/guide\/updating-to-version-10\" target=\"_blank\" rel=\"noreferrer noopener\">following<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In conclusion, the new version of Angular does not introduce revolutions in JavaScript programming but simply goes to stabilize and optimize a framework that we can now consider mature. What will happen in the coming years is impossible to predict (as this 2020 teaches us). Will new actor take over to overturn the hegemony of React and Angular (Vue seems already forgotten)? Will WebAssembly be instrumental in the future of web frameworks? We&#8217;ll see!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See you next!<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>More maintainable and performant Angular apps with version 10<\/p>\n","protected":false},"author":196716245,"featured_media":26556,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_crdt_document":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637524],"tags":[688637390,688637413,688637392],"class_list":["post-26565","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-en","tag-angular-en","tag-typescript-en","tag-web-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Angular 10: what has changed in the last three months? - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Angular 10: what has changed in the last three months? - Blexin\" \/>\n<meta property=\"og:description\" content=\"More maintainable and performant Angular apps with version 10\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-14T22:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-20T16:24:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salvatore Sorrentino\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salvatore Sorrentino\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/\"},\"author\":{\"name\":\"Salvatore Sorrentino\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\"},\"headline\":\"Angular 10: what has changed in the last three months?\",\"datePublished\":\"2020-07-14T22:00:00+00:00\",\"dateModified\":\"2021-05-20T16:24:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/\"},\"wordCount\":1247,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1\",\"keywords\":[\"Angular\",\"Typescript\",\"Web\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/\",\"name\":\"Angular 10: what has changed in the last three months? - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1\",\"datePublished\":\"2020-07-14T22:00:00+00:00\",\"dateModified\":\"2021-05-20T16:24:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1\",\"width\":1024,\"height\":608},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/blog-en\\\/angular-10-what-has-changed-in-the-last-three-months\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Angular 10: what has changed in the last three months?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/en\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/en\\\/#\\\/schema\\\/person\\\/354db2bc97cac71c2ceeca21a92d5bed\",\"name\":\"Salvatore Sorrentino\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g\",\"caption\":\"Salvatore Sorrentino\"},\"url\":\"https:\\\/\\\/blexin.com\\\/en\\\/author\\\/salvatore-sorrentinoblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Angular 10: what has changed in the last three months? - Blexin","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:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/","og_locale":"en_US","og_type":"article","og_title":"Angular 10: what has changed in the last three months? - Blexin","og_description":"More maintainable and performant Angular apps with version 10","og_url":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/","og_site_name":"Blexin","article_published_time":"2020-07-14T22:00:00+00:00","article_modified_time":"2021-05-20T16:24:00+00:00","og_image":[{"width":1024,"height":608,"url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1","type":"image\/png"}],"author":"Salvatore Sorrentino","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Salvatore Sorrentino","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/"},"author":{"name":"Salvatore Sorrentino","@id":"https:\/\/blexin.com\/en\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed"},"headline":"Angular 10: what has changed in the last three months?","datePublished":"2020-07-14T22:00:00+00:00","dateModified":"2021-05-20T16:24:00+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/"},"wordCount":1247,"image":{"@id":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1","keywords":["Angular","Typescript","Web"],"articleSection":["Blog"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/","url":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/","name":"Angular 10: what has changed in the last three months? - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1","datePublished":"2020-07-14T22:00:00+00:00","dateModified":"2021-05-20T16:24:00+00:00","author":{"@id":"https:\/\/blexin.com\/en\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed"},"breadcrumb":{"@id":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1","width":1024,"height":608},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/en\/blog-en\/angular-10-what-has-changed-in-the-last-three-months\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/en\/"},{"@type":"ListItem","position":2,"name":"Angular 10: what has changed in the last three months?"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/en\/#website","url":"https:\/\/blexin.com\/en\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blexin.com\/en\/#\/schema\/person\/354db2bc97cac71c2ceeca21a92d5bed","name":"Salvatore Sorrentino","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a6ec0dc827d2acaa55df9dbf1007e23f6fcb8c9436df52ab48274bb2221085bf?s=96&d=identicon&r=g","caption":"Salvatore Sorrentino"},"url":"https:\/\/blexin.com\/en\/author\/salvatore-sorrentinoblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2020\/12\/530f48c9-8018-4fc7-b29a-8473a61a2888.png?fit=1024%2C608&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-6Ut","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts\/26565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/users\/196716245"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/comments?post=26565"}],"version-history":[{"count":8,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts\/26565\/revisions"}],"predecessor-version":[{"id":31109,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/posts\/26565\/revisions\/31109"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/media\/26556"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/media?parent=26565"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/categories?post=26565"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/en\/wp-json\/wp\/v2\/tags?post=26565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}