Showing posts with label Typescript. Show all posts
Showing posts with label Typescript. Show all posts

Wednesday, January 12, 2022

TS-Node: Typescript execute engine

In my previous article, I have described how to create a simple typescript nodejs project. The method works fine in a small project, but take longer compilation time on a large project because its need to compile all typescript files on every change.
Create Node.js & Express.js with Typescript Project

The solution is using ts-node where it direct run the typescript without compiling it to javascript.

  1. Follow the steps to create a Node.js & Express.js with Typescript.
  2. Type "npm install -g ts-node".
  3. Add an entry to package.json.
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "tsc -b",
        "start": "node dist/app.js",
        "dev": "nodemon dist/app.js",
        "dev:ts": "nodemon --exec ts-node src/app.ts"
      },
  4. Now you can just run the development using 1 console: npm run dev:ts

Thursday, April 22, 2021

Create Node.js & Express.js with Typescript Project

    Here are the steps to create Node.js & Express.js with Typescript Project.

    1. Create a folder.
    2. Type command "npm init" to create package files.
    3. Type "npm install -g typescript" to install typescript.
    4. Type "tsc --init" to create typescript config file.
    5. Type "npm install express --save" to download express module.
    6. Type "npm install nodemon --save-dev" to download nodemon developer tool.
    7. Type "install install @types/node --save-dev" to download typescript node definition files.
    8. Type "install install @types/express --save-dev" to download typescript express definition files.
    9. Edit the package.json
    10. Change to main to "dist/app.js" to point to the start javascript file.
    11. Add the start scripts, "start" : "nodemon dist/app.js"
    12. The package.json will look like below:
    13. Edit the tsconfig.json
    14. Add "moduleResolution" : "node" under "module" : "commonjs".
    15. Change the "outDir" : "./dist". This is the location where typescript compiles the javascript.
    16. Change the "rootDir" : "./srv". This is where we store the typescript files.
    17. The tsconfig.json will look like below:
    18. Create /src folder and add app.ts. Edit the app.ts with the below script.
      import express from "express";

      const app = express();
      const port = process.env.port || 3001;

      // Adding middleway to use syntax req.body.name.
      app.use(express.json());

      app.get("/", (reqres=> res.send("Hello World!"));

      app.listen(port, () =>
        console.log(`Example app is listening on post ${port}!`)
      );

    19. Open a terminal run "npm start". This will start the web server using nodemon.
    20. Open another terminal run "tsc --watch". This will watch the /src folder to compile the ts to javascript.
    21. Call http://localhost:3001/ using postman. If you see "Hello World!", congratulation, you have completed the setup Node.js & Express.js with the Typescript project.

    Below is the project you may download from GitHub.

    Below GitHub is the example of the Node.js & Express.js project. You may compare the different of project setup.

    Friday, April 16, 2021

    Typescript: Shorthand Initialization

    In a lot of use cases, the fields are initialized in the constructor.

    class Person {

        // Fields declaration 
        name : string;
        private id : string;

        // Initial the field value in constructor
        constructor(name : stringid : string) { 
            this.name = name;
            this.id = id;
        }

    }

    You can simplify to

    class Person {

        constructor(private name : stringpublic id : string) {}

    }

    Typescript: Singleton

     Singleton is a design pattern that ensures that only one objects exits.

    /**
     * The Singleton class defines the `getInstance` method that lets clients access
     * the unique singleton instance.
     */
     class ExampleSingleton {
        private static instanceExampleSingleton;

        /**
         * The Singleton's constructor should always be private to prevent direct
         * construction calls with the `new` operator.
         */
        private constructor() { }

        /**
         * The static method that controls the access to the singleton instance.
         *
         * This implementation let you subclass the Singleton class while keeping
         * just one instance of each subclass around.
         */
        public static getInstance(): ExampleSingleton {
            if (!ExampleSingleton.instance) {
                ExampleSingleton.instance = new ExampleSingleton();
            }

            return ExampleSingleton.instance;
        }

        /**
         * Finally, any singleton should define some business logic, which can be
         * executed on its instance.
         */
        public someBusinessLogic() {
            // ...
        }
    }

    /**
     * The client code.
     */
    function clientCode() {
        const s1 = ExampleSingleton.getInstance();
        const s2 = ExampleSingleton.getInstance();

        if (s1 === s2) {
            console.log('Singleton works, both variables contain the same instance.');
        } else {
            console.log('Singleton failed, variables contain different instances.');
        }
    }

    clientCode();

    Singleton used case can be logging class where we can re-use the object.