<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: wshi9124</title>
    <description>The latest articles on DEV Community by wshi9124 (@wshi9124).</description>
    <link>https://dev.to/wshi9124</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F883739%2F11c6af6b-b02b-4500-a1aa-d0556754ab57.png</url>
      <title>DEV Community: wshi9124</title>
      <link>https://dev.to/wshi9124</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wshi9124"/>
    <language>en</language>
    <item>
      <title>TypeScript with React</title>
      <dc:creator>wshi9124</dc:creator>
      <pubDate>Mon, 15 Aug 2022 18:39:48 +0000</pubDate>
      <link>https://dev.to/wshi9124/typescript-with-react-3h66</link>
      <guid>https://dev.to/wshi9124/typescript-with-react-3h66</guid>
      <description>&lt;p&gt;Set up React TypeScript project:&lt;br&gt;
npx create-react-app app-name --template typescript&lt;/p&gt;

&lt;p&gt;Add TypeScript to existing React App:&lt;br&gt;
npm install --save typescript @types/node @types/react @types/react-dom @types/jest&lt;/p&gt;

&lt;p&gt;Notice that instead of js files, we have tsx files instead.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B2cG-OlN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5mdb1a0u4imc5b55v6g0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B2cG-OlN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5mdb1a0u4imc5b55v6g0.png" alt="Image description" width="547" height="866"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As a review, here is how we declare types in TypeScript&lt;/strong&gt;&lt;br&gt;
-let age: number | string means that age can be either a number or string (union type)&lt;br&gt;
-let hobbies:string[] means that the array can only contain strings&lt;br&gt;
-let role:[number,string] means that the array can only contain one number and one string&lt;br&gt;
-for objects we need to declare a type or interface keyword &lt;br&gt;
-? makes age property optional&lt;br&gt;
-let lotsOfPeople:Person[] means that we want an array of Person object&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QjnWK3fQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9pq20klubn0s95mpt7gh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QjnWK3fQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9pq20klubn0s95mpt7gh.png" alt="Image description" width="880" height="466"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;strong&gt;Function Types&lt;/strong&gt;&lt;br&gt;
-void means that there is an absence of any type at all&lt;br&gt;
-you should use unknown instead of any type if you don't know what type it is going to be&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WSL9-oo_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k90fevmjablvwe7vass0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WSL9-oo_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k90fevmjablvwe7vass0.png" alt="Image description" width="880" height="255"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Aliases(type and interface)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in the image below both type and interface mean the same thing. Keep in mind that there is no = for interface
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--enEzIXKZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pvwmljxengyrwz4jo8rk.png" alt="Image description" width="515" height="473"&gt;
-A difference between type and interface is way they extend
-you can extend between type and interface
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wLGSYbqF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vx14lyedm1q7t7qxmdqh.png" alt="Image description" width="344" height="670"&gt;
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Fgdap_Ep--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pfgt467jf2r5nmv4hh0z.png" alt="Image description" width="401" height="664"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now that the review is over, lets get into React with TypeScript&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UseState&lt;/strong&gt;&lt;br&gt;
you can declare type if state with &amp;lt;&amp;gt;. However, you do not really need to specify if there is only one type. It is better for TypeScript to infer what type it is. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--55TB5eMg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/le9brc57w105jnh954do.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--55TB5eMg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/le9brc57w105jnh954do.png" alt="Image description" width="880" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Props&lt;/strong&gt;&lt;br&gt;
There are 2 ways to pass down props in React&lt;br&gt;
However, you should always make an interface first&lt;br&gt;
-Notice that you can find out what type setNumber is by hovering over it&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5tQDXNoU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/37i6je82fhos8a4r1fyy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5tQDXNoU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/37i6je82fhos8a4r1fyy.png" alt="Image description" width="880" height="323"&gt;&lt;/a&gt;&lt;br&gt;
 &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_Jx3MGRI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c09knlmx38r6wv8mxqer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Jx3MGRI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c09knlmx38r6wv8mxqer.png" alt="Image description" width="880" height="347"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X-qI2-H5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rdavj9t7xsoa4ns2ll1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X-qI2-H5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3rdavj9t7xsoa4ns2ll1.png" alt="Image description" width="880" height="239"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Functions&lt;/strong&gt;&lt;br&gt;
You can set what type you want the function to return by putting a : after the (). &lt;br&gt;
-Hint- if you don't know what type the function is, you can hover over the name once you complete writing the function.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qWLWQDFh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y3nm9e259a1pswbbri9d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qWLWQDFh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y3nm9e259a1pswbbri9d.png" alt="Image description" width="880" height="417"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Handling events&lt;/strong&gt;&lt;br&gt;
when handling onClick the type for e is &lt;br&gt;
$React.ChangeEvent&amp;lt; HTMLInputElement | HTMLTextAreaElement &amp;gt;&lt;br&gt;
HTMLInputElement is for inputs &lt;br&gt;
HTMLTextAreaElement is for text area&lt;br&gt;
when handling onSubmit the type for e is&lt;br&gt;
$React.FormEvent&lt;br&gt;
Once again if you can't figure out the type you can hover over the name of the function&lt;br&gt;
&lt;strong&gt;Importing interfaces&lt;/strong&gt;&lt;br&gt;
One way to make code more dry is to import interfaces&lt;br&gt;
the syntax is:&lt;br&gt;
import { InterfaceYouWantToImport as NewNameOfInterface} from "location"&lt;/p&gt;

&lt;p&gt;Now that you have the basics of TypeScript with React, you can start incorporating TypeScript to your own React projects!&lt;/p&gt;

&lt;p&gt;References:&lt;br&gt;
&lt;a href="https://www.typescriptlang.org/docs/handbook/intro.html"&gt;https://www.typescriptlang.org/docs/handbook/intro.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=jrKcJxF0lAU&amp;amp;t=898s&amp;amp;ab_channel=PedroTech"&gt;https://www.youtube.com/watch?v=jrKcJxF0lAU&amp;amp;t=898s&amp;amp;ab_channel=PedroTech&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=FJDVKeh7RJI&amp;amp;t=151s&amp;amp;ab_channel=freeCodeCamp.org"&gt;https://www.youtube.com/watch?v=FJDVKeh7RJI&amp;amp;t=151s&amp;amp;ab_channel=freeCodeCamp.org&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Rspec- Ruby Testing Tool</title>
      <dc:creator>wshi9124</dc:creator>
      <pubDate>Sun, 14 Aug 2022 20:56:00 +0000</pubDate>
      <link>https://dev.to/wshi9124/rspec-ruby-testing-tool-49cm</link>
      <guid>https://dev.to/wshi9124/rspec-ruby-testing-tool-49cm</guid>
      <description>&lt;p&gt;“RSpec is a computer domain-specific language testing tool written in programming language Ruby to test Ruby code. &lt;/p&gt;

&lt;p&gt;Why use Rspec:&lt;br&gt;
Rspec is a great tool to use for test driven development(TDD). TDD is when you start by creating tests and then move to program the feature to pass the tests. TDD is used for documentation, handling edge cases, time efficiency and maintainability. TDD is considered the gold standard in the industry and is beneficial in the long run. However, writing good tests take time and might not be achievable due to deadlines and discipline. &lt;/p&gt;

&lt;p&gt;How to install:&lt;br&gt;
gem install rspec&lt;br&gt;
How to check version:&lt;br&gt;
rspec -v&lt;br&gt;
Add testing to project:&lt;br&gt;
rspec --init&lt;/p&gt;

&lt;p&gt;First, make sure to have the gem 'rspec' inside the gem file and bundle install. Then initialize rspec with rspec --init in terminal.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uhxSU_2h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/shfh9mxhf1ph0r1opa1b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uhxSU_2h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/shfh9mxhf1ph0r1opa1b.png" alt="Image description" width="880" height="202"&gt;&lt;/a&gt;&lt;br&gt;
For my example, I will be writing tests for a class Calculator. To do so, I will first create a calculator.rb file inside the lib folder and a calculator_spec.rb in the spec folder. I will also create an enviroment.rb in the config folder. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PFC1y8T0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zc7puy3zevwwt05z4utm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PFC1y8T0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zc7puy3zevwwt05z4utm.png" alt="Image description" width="658" height="922"&gt;&lt;/a&gt;&lt;br&gt;
 In the .rspec file, make sure to have --format documentation line inside. This will help you better view which tests are passing or failing when you run tests (rspec). &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--10PF1SRd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xql1olllvu4y9k5vw15l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--10PF1SRd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xql1olllvu4y9k5vw15l.png" alt="Image description" width="880" height="202"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZAsVjEH7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6w680zhduehd4ehl67mj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZAsVjEH7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6w680zhduehd4ehl67mj.png" alt="Image description" width="880" height="180"&gt;&lt;/a&gt; &lt;br&gt;
Since we have an enviroment.rb file, we should require_relative the calculator.rb file and require_relative the enviroment.rb file inside spec_helper.rb &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DCcsr1Z2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/radcsped2fa7g735e80f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DCcsr1Z2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/radcsped2fa7g735e80f.png" alt="Image description" width="880" height="128"&gt;&lt;/a&gt;&lt;br&gt;
  &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0hh-UsgA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2zcuexx1cloixl2ryx4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0hh-UsgA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2zcuexx1cloixl2ryx4e.png" alt="Image description" width="880" height="442"&gt;&lt;/a&gt;&lt;br&gt;
After, we will make the class Calculator and describe Calculator inside the calculator_specs.rb file&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PKJsF8uz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a51q21mmfzfj5c2ltdgn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PKJsF8uz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a51q21mmfzfj5c2ltdgn.png" alt="Image description" width="880" height="207"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SGOgXSyI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ckuhu6hgnyv7rs7tzjt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SGOgXSyI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ckuhu6hgnyv7rs7tzjt.png" alt="Image description" width="880" height="178"&gt;&lt;/a&gt;&lt;br&gt;
Now that set up is done, lets write some basic tests&lt;br&gt;
Structure of tests:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wLWMKK7V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3kk7rb7f3m125xk6c2nq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wLWMKK7V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3kk7rb7f3m125xk6c2nq.png" alt="Image description" width="880" height="436"&gt;&lt;/a&gt; &lt;br&gt;
 &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gl3b2FiO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zfptpg2jmttil55lzeim.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gl3b2FiO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zfptpg2jmttil55lzeim.png" alt="Image description" width="880" height="825"&gt;&lt;/a&gt;&lt;br&gt;
When we run rspec in the terminal, this is what we get back. it...do describes each individual test that we want to pass. context...do is optional, but useful to organize tests. expect is the core of how we make tests. For example, expect(subject.add(5,6)).to eq(11) means that the test is looking for an instance method called add that has two parameters and will return 11. We should write more than one expect in each method so that we can't "cheat" the tests. &lt;/p&gt;

&lt;p&gt;Here are some other ways to write expectations:&lt;br&gt;
I will also link documentation about expectations in the bottom of the blog&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aecL885b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/af7yy7cdnqiwngtrb5ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aecL885b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/af7yy7cdnqiwngtrb5ed.png" alt="Image description" width="880" height="386"&gt;&lt;/a&gt;&lt;br&gt;
To pass these tests, lets go to our Calculator class and write some methods. &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--esAb20-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8l82koq7mh22skvnph97.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--esAb20-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8l82koq7mh22skvnph97.png" alt="Image description" width="770" height="569"&gt;&lt;/a&gt;&lt;br&gt;
When we run rspec again, we can see that we passed all of our tests! Now you are ready to create your own tests in Ruby! &lt;br&gt;
 &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5yX9W73p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pgy8lyg4imxlunpp0uta.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5yX9W73p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pgy8lyg4imxlunpp0uta.png" alt="Image description" width="880" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rspec documentation and source:&lt;br&gt;
&lt;a href="https://rspec.info/documentation/"&gt;https://rspec.info/documentation/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://rspec.info/documentation/3.9/rspec-expectations/"&gt;https://rspec.info/documentation/3.9/rspec-expectations/&lt;/a&gt;&lt;br&gt;
Code and slides belong to Laura Berge:&lt;br&gt;
&lt;a href="https://github.com/lberge17/nyc-060622-rspec-intro"&gt;https://github.com/lberge17/nyc-060622-rspec-intro&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.google.com/presentation/d/132o4KFVVIZsPvPy8M9mROL3Nitd4PKBC0tN9QsKKvhg/edit#slide=id.g14510627d9b_0_130"&gt;https://docs.google.com/presentation/d/132o4KFVVIZsPvPy8M9mROL3Nitd4PKBC0tN9QsKKvhg/edit#slide=id.g14510627d9b_0_130&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Intro to TypeScript Part 2</title>
      <dc:creator>wshi9124</dc:creator>
      <pubDate>Thu, 11 Aug 2022 15:47:00 +0000</pubDate>
      <link>https://dev.to/wshi9124/intro-to-typescript-part-2-23hp</link>
      <guid>https://dev.to/wshi9124/intro-to-typescript-part-2-23hp</guid>
      <description>&lt;p&gt;&lt;strong&gt;Classes in TypeScript&lt;/strong&gt; - TypeScript supports access modifiers (private, public and protected) (it will be public by default) In this example, we do not access to firstName and lastName because they are private only to the class, User. &lt;br&gt;
readonly- makes a property as read-only(value cannot change once it is set). &lt;br&gt;
Interface- In the interface, UserInterface, TypeScript expects the function getFullname in class User or their will also be an error.&lt;br&gt;
Static property- only accessible on the class itself and not the instance&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mk1pe1DP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xinkt9wb8mvlzmwapsnn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mk1pe1DP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xinkt9wb8mvlzmwapsnn.png" alt="Image description" width="880" height="674"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Generics, interfaces, and functions in TypeScript&lt;/strong&gt;&lt;br&gt;
Generics- all generic datatypes are written inside &amp;lt;&amp;gt; (instead of using any, you use generics) Instead of using multiple interfaces, we used generics (allows use to provide different data types)&lt;br&gt;
Interfaces- set rules and syntax that any entity must adhere to.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PVKjAaw7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tui8yoz8stzshvndtqei.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PVKjAaw7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tui8yoz8stzshvndtqei.png" alt="Image description" width="880" height="680"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Enums(enumerable) in TypeScript&lt;/strong&gt; &lt;br&gt;
Enum is the reserved word to create enumerable (should be all capitalized)&lt;br&gt;
*values should be assigned with an equal sign instead of a : *&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_ySjYsZA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kriczm2on8x8of38uyao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_ySjYsZA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kriczm2on8x8of38uyao.png" alt="Image description" width="880" height="550"&gt;&lt;/a&gt;&lt;br&gt;
Next blog: Typescript in React&lt;br&gt;
Reference:&lt;br&gt;
TypeScript official documentation:&lt;br&gt;
&lt;a href="https://www.typescriptlang.org/docs/handbook/intro.html"&gt;https://www.typescriptlang.org/docs/handbook/intro.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=gp5H0Vw39yw&amp;amp;ab_channel=freeCodeCamp.org"&gt;https://www.youtube.com/watch?v=gp5H0Vw39yw&amp;amp;ab_channel=freeCodeCamp.org&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Intro to TypeScript</title>
      <dc:creator>wshi9124</dc:creator>
      <pubDate>Wed, 20 Jul 2022 23:49:00 +0000</pubDate>
      <link>https://dev.to/wshi9124/intro-to-typescript-1km9</link>
      <guid>https://dev.to/wshi9124/intro-to-typescript-1km9</guid>
      <description>&lt;p&gt;TypeScript is a superset of JavaScript. It is used to highlight unexpected behavior in your code, lowering the chance of bugs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing TypeScript:&lt;/strong&gt;&lt;br&gt;
$ npm install -g typescript&lt;br&gt;
on your terminal&lt;/p&gt;

&lt;p&gt;check version: tsc -v&lt;/p&gt;

&lt;p&gt;configure file and keep compiler on, type $ &lt;strong&gt;tsc-w&lt;/strong&gt; in terminal&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TNWckR66--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v1qkw95ld3mr36bnfkw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TNWckR66--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v1qkw95ld3mr36bnfkw9.png" alt="Image description" width="880" height="271"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;One way TypeScript does this is for you to tell what the types should be. TypeScript will throw an error if you use a different type.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NSOm6SzZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pletod5y9y36t0aatt07.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NSOm6SzZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pletod5y9y36t0aatt07.png" alt="Image description" width="880" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For functions you can declare type on the parameters and type you want to return&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OJP3M-Fc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zu40sj4x6pimk3gigg0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OJP3M-Fc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zu40sj4x6pimk3gigg0e.png" alt="Image description" width="880" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating objects&lt;/strong&gt; &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D-e7fIvu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1bcilo0xt1kb6j0pkx4c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D-e7fIvu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1bcilo0xt1kb6j0pkx4c.png" alt="Image description" width="880" height="182"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interfaces&lt;/strong&gt;- helps us describe entities&lt;br&gt;
? makes key not mandatory and should be placed before the colon&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0ekjZISq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bsyt2mbf7v2sx4yf6foe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0ekjZISq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bsyt2mbf7v2sx4yf6foe.png" alt="Image description" width="880" height="591"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Union Operators&lt;/strong&gt;- | stands for or&lt;br&gt;
Most popular use for union is to check for null&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RCkoQMja--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mzpj7ruoecmk7i5tk3cc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RCkoQMja--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mzpj7ruoecmk7i5tk3cc.png" alt="Image description" width="880" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alias&lt;/strong&gt;- can replace type with aliases (should be capitalized)&lt;br&gt;
 &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RFHA6R5s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vgmqkek603c1zthbbjwe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RFHA6R5s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vgmqkek603c1zthbbjwe.png" alt="Image description" width="880" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Combining Union Operators and Aliases&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zDwv-YWZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/09c0jp0weraxgh8603es.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zDwv-YWZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/09c0jp0weraxgh8603es.png" alt="Image description" width="880" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Void data type&lt;/strong&gt;-  set of undefined and null (also used if we don't want a return value)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V0bBQ6RV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8nye9n87ujqpzeiwgz1s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V0bBQ6RV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8nye9n87ujqpzeiwgz1s.png" alt="Image description" width="880" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Any type&lt;/strong&gt;- Can be any type (not very useful, do not use, turns off checks)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Never Type&lt;/strong&gt;- function with never cant be executed to the end (function) that will never end &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oO0Yhsqn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jzv9rd6t2uxip4whvm5z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oO0Yhsqn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jzv9rd6t2uxip4whvm5z.png" alt="Image description" width="880" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unknown type&lt;/strong&gt; when you don't know what type you want it to be. You can fix the error below by changing pageNumber: from string to unknown&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a3CPnMca--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q4k8gf00zatg7esmloo1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a3CPnMca--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q4k8gf00zatg7esmloo1.png" alt="Image description" width="880" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type assertion&lt;/strong&gt; - "as" keyword is known as Type assertion &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3KwqDHrk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iplxivfr3v0m74xcsem0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3KwqDHrk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iplxivfr3v0m74xcsem0.png" alt="Image description" width="859" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TypeScript working with DOM&lt;/strong&gt; - TypeScript has a lot of types for DOM already built in &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--itiM7ToB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z42d05cf5b1glpl06dl4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--itiM7ToB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z42d05cf5b1glpl06dl4.png" alt="Image description" width="880" height="287"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--inbuSIky--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fxazc6p6hzxvptpz6js8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--inbuSIky--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fxazc6p6hzxvptpz6js8.png" alt="Image description" width="880" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next Blog: Classes, generic interfaces, enums, and Typescript in React&lt;/p&gt;

&lt;p&gt;Reference: &lt;br&gt;
TypeScript official documentation:&lt;br&gt;
&lt;a href="https://www.typescriptlang.org/docs/handbook/intro.html"&gt;https://www.typescriptlang.org/docs/handbook/intro.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=gp5H0Vw39yw&amp;amp;ab_channel=freeCodeCamp.org"&gt;https://www.youtube.com/watch?v=gp5H0Vw39yw&amp;amp;ab_channel=freeCodeCamp.org&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Common types of Event Listeners and more</title>
      <dc:creator>wshi9124</dc:creator>
      <pubDate>Tue, 28 Jun 2022 03:31:41 +0000</pubDate>
      <link>https://dev.to/wshi9124/common-types-of-event-listeners-and-more-o8p</link>
      <guid>https://dev.to/wshi9124/common-types-of-event-listeners-and-more-o8p</guid>
      <description>&lt;p&gt;When writing JavaScript, there are many different types of events that the browser can trigger. Here are some of the most common events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mouse Events&lt;/strong&gt;- Events that occur when the mouse interacts with the HTML document&lt;/p&gt;

&lt;p&gt;1)click- occurs when the user clicks on something&lt;br&gt;
2)dbclick- occurs when user double clicks on something&lt;br&gt;
3)contextmenu- occurs when the user right-clicks on an element to open a context menu&lt;br&gt;
3)mouseup- occurs when when a user releases a mouse button over an element&lt;br&gt;
4)mousedown- occurs when the user presses a mouse button over an element&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keyboard Events&lt;/strong&gt;- event that occurs when user interacts with the keyboard (useful when creating games)&lt;/p&gt;

&lt;p&gt;1)keydown- occurs when a key is pressed&lt;br&gt;
2)keyup- occurs when key is released&lt;br&gt;
3)keypress- occurs when key is held (obsolete not recommended for use)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Touch events&lt;/strong&gt;- occurs when there is finger activity on a touch screen or trackpad. They are similar to mouse events except that they support simultaneous touches at different locations on the touch surface. However, in most cases you want to use mouse events over touch events.&lt;/p&gt;

&lt;p&gt;1)touchstart- occurs when the user places a touch point on the touch surface&lt;br&gt;
2)touchend- occurs when the user removes a touch point from the surface&lt;br&gt;
3)touchmove- occurs when the user moves a touch point along the surface&lt;br&gt;
4)touchcancel- occurs when a touch point has been disrupted in some way &lt;/p&gt;

&lt;p&gt;Other common Events- &lt;br&gt;
1)submit- occurs when the submit button is clicked (different from a click event)&lt;br&gt;
2)error- occurs when a resource has failed to load&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Useful event listeners for reference&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_animationevent.asp"&gt;Animation Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when a CSS animation runs&lt;br&gt;
(animationend, animationiteration, animationstart)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_clipboardevent.asp"&gt;Clipboard Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when the clipboard is modified&lt;br&gt;
(copy,cut,paste)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_dragevent.asp"&gt;Drag Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when elements are dragged and/or dropped&lt;br&gt;
(drag, dragend, dragenter, dragleave, dragover, dragstart, drop)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_focusevent.asp"&gt;Focus Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when elements gets or loses focus&lt;br&gt;
(blur, focus, focusin, focusout)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_hashchangeevent.asp"&gt;Hash Change Event&lt;/a&gt;&lt;/strong&gt;- &lt;br&gt;
 Events that occur when the anchor part of the URL changes&lt;br&gt;
(hashchange)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_inputevent.asp"&gt;Input Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when an form element's content changes&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_keyboardevent.asp"&gt;Keyboard Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when user presses a key on the keyboard&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_mouseevent.asp"&gt;Mouse Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when the mouse interacts with the HTML&lt;br&gt;
(mouseenter, mouseleave, mousemove, mouseout, mouseover)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_pagetransitionevent.asp"&gt;Page Transition Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when user navigates to, and away from, a webpage&lt;br&gt;
(pagehide, pageshow)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_popstateevent.asp"&gt;Pop State Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when the window's history changes&lt;br&gt;
(popstate)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_progressevent.asp"&gt;Progress Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when loading external resources&lt;br&gt;
(loadstart)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_storageevent.asp"&gt;Storage Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when there is changes in the window's storage area&lt;br&gt;
(storage)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_touchevent.asp"&gt;Touch Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when user touches a touch-based device&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_transitionevent.asp"&gt;Transition Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when a CSS transition runs&lt;br&gt;
(transitionend)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_uievent.asp"&gt;Ui Event&lt;/a&gt;&lt;/strong&gt;- Events that are triggered from the user interface &lt;br&gt;
(abort, beforeunload, error, load, resize, scroll ,select, unload)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_wheelevent.asp"&gt;Wheel Event&lt;/a&gt;&lt;/strong&gt;- Events that occur when the mouse wheel is scrolling&lt;br&gt;
(wheel)&lt;br&gt;
&lt;strong&gt;&lt;a href="https://www.w3schools.com/jsref/obj_event.asp"&gt;Event Object&lt;/a&gt;&lt;/strong&gt; page&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
