<?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: Weezykon Akinbode</title>
    <description>The latest articles on DEV Community by Weezykon Akinbode (@weezykon).</description>
    <link>https://dev.to/weezykon</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%2F8201%2Fd0203763-890d-4c9b-9ab4-82b380fd2794.jpg</url>
      <title>DEV Community: Weezykon Akinbode</title>
      <link>https://dev.to/weezykon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/weezykon"/>
    <language>en</language>
    <item>
      <title>NodeJs and Express with Typescript for Beginners. Easy Steps.</title>
      <dc:creator>Weezykon Akinbode</dc:creator>
      <pubDate>Thu, 27 Aug 2020 04:19:22 +0000</pubDate>
      <link>https://dev.to/weezykon/nodejs-and-express-with-typescript-for-beginners-easy-steps-3121</link>
      <guid>https://dev.to/weezykon/nodejs-and-express-with-typescript-for-beginners-easy-steps-3121</guid>
      <description>&lt;p&gt;Node is a run-time environment that makes it possible to write server-side Javascript. It has gained a lot of widespread adoption since 2011, the actual release date. Writing server-side using Javascript can be hectic and worrisome as your codebase grows, due to the fact that Javascript language lacks strong static typing.&lt;/p&gt;

&lt;p&gt;TypeScript is a typed (optional) super-set of JavaScript that can help with building and managing large-scale JavaScript projects. It can be thought of as JavaScript with additional features like &lt;code&gt;strong static typing&lt;/code&gt;, &lt;code&gt;compilation&lt;/code&gt;, &lt;code&gt;object-oriented programming&lt;/code&gt; and ability to use &lt;code&gt;interfaces&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Since, Typescript is an object-oriented language which makes the app code more &lt;code&gt;consistent, clean, simple, testable and reusable&lt;/code&gt;. So it should better to use typescript for developing large projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Now let's dive in
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2FiMBEgyXkFBtdCFS93i%2Fgiphy.gif%3Fcid%3Decf05e479m1p1vp8jlq63yjc1ps625w6s1djkl711n4q63ve%26rid%3Dgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia1.giphy.com%2Fmedia%2FiMBEgyXkFBtdCFS93i%2Fgiphy.gif%3Fcid%3Decf05e479m1p1vp8jlq63yjc1ps625w6s1djkl711n4q63ve%26rid%3Dgiphy.gif" alt="Let's dive in"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Steps
&lt;/h3&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Install typescript globally if you don't have it. Open your terminal or command prompt.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g typescript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Create a folder called &lt;code&gt;NodeTypescript&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the folder with your favourite code editor. Mine is Visual studio code (VSCode)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In your terminal or command prompt, we will dive inside the folder we created&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd NodeTypeScript
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;For those using vscode, you can use the command line in vscode, so you don't need to do the step above&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create app.ts&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;NB. &lt;code&gt;tsc&lt;/code&gt; it's used to compile from typescript to javascript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;let's set up our typescript config
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tsc --init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;h3&gt;
  
  
  NB
&lt;/h3&gt;

&lt;p&gt;At default, the target is ES5, which is deprecated at the moment, ES5 uses &lt;code&gt;var&lt;/code&gt;, while ES6+ uses &lt;code&gt;let&lt;/code&gt; and &lt;code&gt;const&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;change the target from &lt;code&gt;es5&lt;/code&gt; to &lt;code&gt;es6&lt;/code&gt; in tsconfig.json&lt;/li&gt;
&lt;li&gt;uncomment the &lt;code&gt;outDir&lt;/code&gt; and set it to dist. Note this is where we want our complied version to go to.&lt;/li&gt;
&lt;li&gt;uncomment the &lt;code&gt;rootDir&lt;/code&gt; and set it to dist. Note this is where our typescript files will be stored.&lt;/li&gt;
&lt;li&gt;uncomment &lt;code&gt;moduleResolution&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;Create folder &lt;code&gt;scr&lt;/code&gt; then move the app.ts you created earlier to that folder.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;tsconfig.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "compilerOptions": {
    /* Basic Options */
    // "incremental": true,                   /* Enable incremental compilation */
    "target": "es6",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
    // "lib": [],                             /* Specify library files to be included in the compilation. */
    // "allowJs": true,                       /* Allow javascript files to be compiled. */
    // "checkJs": true,                       /* Report errors in .js files. */
    // "jsx": "preserve",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
    // "declarationMap": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */
    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
    // "outFile": "./",                       /* Concatenate and emit output to single file. */
    "outDir": "./dist",                        /* Redirect output structure to the directory. */
    "rootDir": "./src",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    // "composite": true,                     /* Enable project compilation */
    // "tsBuildInfoFile": "./",               /* Specify file to store incremental compilation information */
    // "removeComments": true,                /* Do not emit comments to output. */
    // "noEmit": true,                        /* Do not emit outputs. */
    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
    // "isolatedModules": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */

    /* Strict Type-Checking Options */
    "strict": true,                           /* Enable all strict type-checking options. */
    // "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */
    // "strictNullChecks": true,              /* Enable strict null checks. */
    // "strictFunctionTypes": true,           /* Enable strict checking of function types. */
    // "strictBindCallApply": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
    // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
    // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
    // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */

    /* Additional Checks */
    // "noUnusedLocals": true,                /* Report errors on unused locals. */
    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
    // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
    // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */

    /* Module Resolution Options */
    "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
    // "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
    // "typeRoots": [],                       /* List of folders to include type definitions from. */
    // "types": [],                           /* Type declaration files to be included in compilation. */
    // "allowSyntheticDefaultImports": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
    "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
    // "allowUmdGlobalAccess": true,          /* Allow accessing UMD globals from modules. */

    /* Source Map Options */
    // "sourceRoot": "",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */
    // "mapRoot": "",                         /* Specify the location where debugger should locate map files instead of generated locations. */
    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */

    /* Experimental Options */
    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */

    /* Advanced Options */
    "forceConsistentCasingInFileNames": true  /* Disallow inconsistently-cased references to the same file. */
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;let's set up our node package.json
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm init --y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Let's install dependencies and devDependencies
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i express
npm i D typescript ts-node nodemon @types/node @types/express
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;We will edit the scripts section, we will add &lt;code&gt;start&lt;/code&gt;, &lt;code&gt;dev&lt;/code&gt; and &lt;code&gt;build&lt;/code&gt;
&lt;code&gt;start&lt;/code&gt; this will start the compile folder.
&lt;code&gt;dev&lt;/code&gt; this will start the typescript file.
&lt;code&gt;build&lt;/code&gt; this will compile the typescript files and save it to dist.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;package.json&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
    "start": "node dist/app.js",
    "dev": "nodemon src/app.ts",
    "build": "tsc -p ."
},
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Let's edit out app.ts
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import express from 'express';

const app = express();

app.get('/', (req, res) =&amp;gt; {
    res.send('hello');
});
const PORT = 3000;

app.listen(PORT, () =&amp;gt; console.log(`Server Running on port ${PORT}`));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will run on port 3000, to run this server. use the code below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  NOTE: This will run the typescript files in the &lt;code&gt;src&lt;/code&gt; folder.
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Let's add typescript types to our app.ts
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import express, { Application, Request, Response, NextFunction } from 'express';

const app: Application = express();

app.get('/', (req: Request, res: Response, next: NextFunction) =&amp;gt; {
    res.send('hello');
});
const PORT = 5000;

app.listen(PORT, () =&amp;gt; console.log(`Server Running on port ${PORT}`));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  WOOOOW.. Finally at the ending
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2FZcKASxMYMKA9SQnhIl%2F200.webp%3Fcid%3Decf05e47kabnkif8xer3tz9pryeo7motmul4y814pv8ajuj0%26rid%3D200.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia0.giphy.com%2Fmedia%2FZcKASxMYMKA9SQnhIl%2F200.webp%3Fcid%3Decf05e47kabnkif8xer3tz9pryeo7motmul4y814pv8ajuj0%26rid%3D200.webp" alt="Finally"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let's compile by building our typescript file. run this command below in your command line.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will compile all the files in the &lt;code&gt;src&lt;/code&gt; folder then dump them in the &lt;code&gt;dist&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;The last command we will run will be&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will run the files in the &lt;code&gt;dist&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2Fl3q2XhfQ8oCkm1Ts4%2F200.webp%3Fcid%3Decf05e470buip0ia91zejwxgfv8iatoa9j0bi2ott6h9xdq7%26rid%3D200.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2Fl3q2XhfQ8oCkm1Ts4%2F200.webp%3Fcid%3Decf05e470buip0ia91zejwxgfv8iatoa9j0bi2ott6h9xdq7%26rid%3D200.webp" alt="Claps"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2FxUPOqFfyBzvODVNTNu%2F200w.webp%3Fcid%3Decf05e4763lyo81p1i95nmtw9qsf97i2ma6wkoncj0rpi5td%26rid%3D200w.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia3.giphy.com%2Fmedia%2FxUPOqFfyBzvODVNTNu%2F200w.webp%3Fcid%3Decf05e4763lyo81p1i95nmtw9qsf97i2ma6wkoncj0rpi5td%26rid%3D200w.webp" alt="Thank You"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Please remember to share.❤️❤️❤️
&lt;/h1&gt;

</description>
      <category>node</category>
      <category>typescript</category>
      <category>express</category>
      <category>es6</category>
    </item>
  </channel>
</rss>
