graph LR
    TS["fa:fa-code TypeScript"]

    TS --> |"Adds static typing"| Types["fa:fa-list-ul Basic Types"]
    TS --> |"Enhances code organization"| Interface["fa:fa-puzzle-piece Interfaces"]
    TS --> |"Adds OOP features"| Classes["fa:fa-cube Classes"]
    TS --> |"Type manipulation"| Advanced["fa:fa-cogs Advanced Types"]
    TS --> |"Code reusability"| Generics["fa:fa-recycle Generics"]

    Types --> T1["fa:fa-font string"]
    Types --> T2["fa:fa-hashtag number"]
    Types --> T3["fa:fa-toggle-on boolean"]
    Types --> T4["fa:fa-layer-group array"]
    Types --> T5["fa:fa-object-group object"]
    Types --> T6["fa:fa-times null/undefined"]

    Interface --> I1["fa:fa-file-contract Object Shape"]
    Interface --> I2["fa:fa-arrows-alt Extended Interfaces"]
    Interface --> I3["fa:fa-check Optional Properties"]
    Interface --> I4["fa:fa-lock Readonly Properties"]

    Classes --> C1["fa:fa-shield-alt Access Modifiers"]
    Classes --> C2["fa:fa-arrow-up Inheritance"]
    Classes --> C3["fa:fa-compress-arrows-alt Implementing Interfaces"]
    Classes --> C4["fa:fa-bullseye Abstract Classes"]

    Advanced --> A1["fa:fa-union Union Types"]
    Advanced --> A2["fa:fa-intersection-alt Intersection Types"]
    Advanced --> A3["fa:fa-type Type Aliases"]
    Advanced --> A4["fa:fa-keyboard Keyof"]

    Generics --> G1["fa:fa-box Generic Functions"]
    Generics --> G2["fa:fa-boxes Generic Classes"]
    Generics --> G3["fa:fa-constraint Generic Constraints"]