Understanding Advanced TypeScript Concept & Types | Simplilearn (2023)

Many developers who use JavaScript are familiar with the pains of debugging. When you are in charge of executing a program, you must look for new bugs and then do it again as needed. And you end up finally solving your problem after hours of troubleshooting. This is a common issue with non-compiling programming languages like JavaScript.

Microsoft invented TypeScript to address the inadequacies of JavaScript. More and more developers are expected to know Advanced TypeScript as larger organizations discover the benefits of incorporating it into their technological stack. This tutorial will discuss Advanced TypeScript Concepts that you need to know.

Basics to Advanced - Learn It All!

Caltech PGP Full Stack DevelopmentExplore Program

Understanding Advanced TypeScript Concept & Types | Simplilearn (1)

Type Assertions

A type assertion is similar to a typecast in other languages, but it does not require additional data verification or restructuring. It does not affect runtime and is only used by the compiler. TypeScript expects you, the programmer, to complete any necessary specific checks.

There are two types of type assertions.

One is the as-syntax:

let someValue: unknown = "this is a string";

let strLength: number = (someValue as string).length;

The other version is the “angle-bracket” syntax:

let someValue: unknown = "this is a string";

let strLength: number = (<string>someValue).length;

Both samples are identical. Choosing one over the other is primarily a matter of preference; however, only-style assertions are allowed when combining TypeScript with JSX.

Type Aliases

Type aliases give a type a new name. Type aliases are similar to interfaces. They can be used to name primitives, unions, tuples, and any other kinds that you'd have to define by hand otherwise.

Aliasing doesn't create a new type; instead, it gives it a new name. Aliasing a primitive isn't very useful; however, it can be used for documentation purposes.

Type aliases, like interfaces, can be general; all you have to do is add type parameters and utilize them on the right side of the alias declaration.

type Container<T> = { value: T };

In Operator

The in operator serves as a type narrowing expression. The "true" branch narrows to types that have an optional or required property n, and the "false" branch narrows to types that have an optional or missing property n for a n in x expression, where a string literal or string literal type is n and x is a union type.

function move(pet: Fish | Bird) {

if ("swim" in pet) {

return pet.swim();


return pet.fly();


Nullable Types

Null and undefined are two special types in TypeScript: null and undefined values, respectively. They're not particularly useful, much like a void. Null and undefined are subclasses of all other types by default. That means you can give things like number null and undefined values.

However, when the strict null checks flag is set, null and undefined can only be assigned to unknown, any, and their respective types (the one exception being that undefined is also assignable to void). This helps you avoid a lot of frequent errors. You can use the union type string | null | undefined if you want to send in either a string, null, or undefined.

let u: undefined = undefined;

let n: null = null;

Learn From The Best Mentors in the Industry!

Automation Testing Masters ProgramExplore Program

Understanding Advanced TypeScript Concept & Types | Simplilearn (2)

Index Types

You can get the compiler to check code that utilizes dynamic property names using index types. A typical JavaScript pattern, for example, is to select a subset of an object's properties:

You may build and use this function in TypeScript, using the index type query and indexed access operators.

function pluck<T, K extends keyof T>(o: T, propertyNames: K[]): T[K][] {

return propertyNames.map((n) => o[n]);


Key of T, the index type query operator. For any type T, the key of T is the union of known, public property names of T.

T[K], the indexed access operator, is the second operator. The type syntax reflects the expression syntax in this case.

T[K] can, like index-type queries, be used in a generic environment, which is where its true potential is seen. All you have to do now is make sure the type variable K extends the key of T.

In getProperty, o: T and propertyName: K means o[propertyName]: T[K]. The compiler will initiate the actual key type after you return the T[K] result; therefore, the return type of getProperty will change depending on which property you request.

Mapped Types

Taking an existing type and making each of its properties optional is a typical undertaking.

Because this happens frequently enough in JavaScript, where TypeScript has a mapped types feature that allows you to define new types based on existing ones. The new type turns each property in the old type in the same way into a mapped type. You can, for example, make all properties optional or of the read-only type.

It's important to note that this syntax refers to a type rather than a member. You can use an intersection type to add more members:

Take a look at a simple mapped type and its parts:

type Keys = "optionA" | "optionB";

type Flags = { [K in Keys]: boolean };

The syntax is similar to index signatures with a for in the middle. There are three sections in total:

  • The type variable K is assigned to each property one by one.
  • The literal union of strings The names of the properties to iterate over are stored in keys.
  • The property's type as a result.

Conditional Types

Based on a condition given as a type relationship test, a conditional type chooses one of two alternative types:

T extends U ? X : Y

When T can be assigned to U, the type is X, and when it can't, the type is Y.

Because the condition depends on one or more type variables, a conditional type T extends U? X: Y and is either resolved to X or Y or delayed. Whether to resolve to X or Y, or defer, when T or U contains type variables is determined by whether the type system has enough information to conclude that T is always assignable to U.

Distributive conditional types are conditional types in which the checked type is a bare type parameter. During instantiation, distributive conditional types are automatically distributed over union types.

For example, an instantiation of T extends U ? X: Y with the type argument A | B | C for T is resolved as (A extends U ? X : Y) | (B extends U ? X : Y) | (C extends U ? X : Y).

Get the Coding Skills You Need to Succeed

Full Stack Development-MEANExplore Program

Understanding Advanced TypeScript Concept & Types | Simplilearn (3)

Supporting Library From Node Modules

TypeScript includes a series of declaration files to guarantee that TypeScript and JavaScript support works well right out of the box (.d.ts files). The various APIs in the JavaScript language and the standard browser DOM APIs are represented in these declaration files. While there are some fair defaults based on your target, you can configure the lib setting in the tsconfig.json to specify which declaration files your program uses.

However, there are two drawbacks to using these declaration files with TypeScript:

Since you upgrade TypeScript, you must also deal with changes to TypeScript's built-in declaration files, which can be difficult when the DOM APIs change so regularly.

Customizing these files to meet your needs and the demands of your project's dependencies is difficult.

In TypeScript 4.5, a feature similar to @types/ support allows you to override a specific built-in lib. TypeScript will check for a scoped @typescript/lib-* package in node modules when selecting which lib files to include.

After that, you can use your package manager to install a specific package to take over for a particular library.


"dependencies": {

"@typescript/lib-dom": "npm:@types/web"



Then, starting with TypeScript 4.5, you may update TypeScript, and the lock file in your dependency management will ensure that it utilizes the same version of the DOM types. As a result, you'll be able to update the types on your schedule.

The Awaited Type and Promise Improvements

Understanding Advanced TypeScript Concept & Types | Simplilearn (4)

The Awaited type is a new utility type introduced in TypeScript 4.5. This type is intended to represent activities such as the await in async functions and the. Then () method on Promises - notably, the way they recursively unwrap Promises.

Existing APIs, such as JavaScript built-ins like Promise. all, Promise.race, and others can benefit from the Awaited type. Some of Promise.all's inference concerns are provided as a foundation for Awaited.

Promise.all combine certain traits with Awaited to produce far superior inference results.

Tail-Recursion Elimination on Conditional Types

When TypeScript identifies potentially infinite recursion or any type of expansions that take a long time and damage your editor experience, it must often gracefully fail. As a result, TypeScript includes heuristics to ensure that it doesn't run off the tracks while deconstructing an indefinitely deep type or working with types that provide many intermediate results.

type TrimLeft<T extends string> =

T extends ` ${infer Rest}` ? TrimLeft<Rest> : T;

// Test = "hello" | "world"

type Test = TrimLeft<" hello" | " world">;

The TrimLeft type, for example, removes spaces from the beginning of a string-like type. When provided a string type with a space at the beginning, TrimLeft returns the remainder to the user.

This type is handy, but it will throw an error if a string contains more than 50 leading spaces.

This is problematic because it frequently used these types in modeling operations on strings, such as parsers for URL routers. To make matters worse, a more useful type usually generates more type instantiations, resulting in additional input length restrictions.

TrimLeft, on the other hand, is written in such a way that it is tail-recursive on one branch. When it calls itself again, it returns the result instantly and does nothing with it. Because these types don't require any intermediate outcomes, you can construct them more rapidly without activating many of TypeScript's built-in type recursion heuristics.

As a result, TypeScript 4.5 removes some tail-recursion from conditional types. TypeScript can prevent intermediary instantiations as long as one branch of a conditional type is merely another conditional type. There are still heuristics in place to keep these types on track.

Become a Certified Web Developer in 6 Months!

Caltech Coding BootcampExplore Program

Understanding Advanced TypeScript Concept & Types | Simplilearn (5)

Assert Signatures

The assert signatures feature allows you to construct functions that operate as type guards and side effects. Instead of returning their boolean result explicitly.

function assertString(input) {

if (typeof input === 'string') return;

else throw new Error('Input must be a string!');


function doSomething(input) {



doSomething('abc'); // All good

doSomething(123); // Throws an error

After assertString, TypeScript has no way of knowing if you've guaranteed the type of input. To prevent this, most people just make the parameter input: string, which is fine, but it also moves the type checking problem somewhere, and in circumstances where you just want to fail hard, having this option is beneficial.

function assertString(input: any): asserts input is string { // <-- the magic

if (typeof input === 'string') return;

else throw new Error('Input must be a string!');


function doSomething(input: string | number) {


If this function ever returns, TypeScript can filter the type of input to string, exactly like it would if inside an if block with a type guard. To make this safe, your assert function must either give an error or not return at all if the assertion isn't true.

Recursive Type Aliases

The ability to "recursively" reference type aliases has always been limited because each type of alias must be capable of substituting itself for whatever it aliases. Because this isn't always possible, the compiler rejects some recursive aliases.

Interfaces can be recursive, but their expressiveness is limited, and type aliases cannot. That involves combining the two: creating a type alias and extracting the type's recursive portions into interfaces. It's effective.

type ValueOrArray<T> = T | ArrayOfValueOrArray<T>;

interface ArrayOfValueOrArray<T> extends Array<ValueOrArray<T>> {}

By establishing an interface, users may write practically the same code.

TypeScript has no trouble working with interfaces (and other object types) because they introduce a level of indirection, and their whole structure does not need to be eagerly built up.

However, many found the workaround of introducing the interface to be inconvenient. And there was nothing wrong with the old version of ValueOrArray that used Array directly in concept. TypeScript could express them appropriately if the compiler was a little lazier and just calculated the type arguments to Array when needed.

Next Steps

Hope that this advanced TypeScript tutorial has provided you with a fundamental understanding of its concepts. Course certification will benefit you if you study these programming languages and work as a developer or programmer. Learn typescript by enrolling in the PGP Full Stack Web Developer program.

Please send us a message if you have any questions or problems about this "Advanced TypeScript" tutorial. Leave your questions and feedback in the comments section below. A member of our team will answer them for you as soon as possible!


What is advanced TypeScript? ›

Typescript allows us to combine multiple types to create a new type. This approach is similar to logical expressions in JavaScript where we can use the logical OR || or the logical AND && to create new powerful checks.

What are the main concepts in TypeScript? ›

TypeScript adds common concepts such as classes, modules, interfaces, generics and (optional) static typing to JavaScript. It is a superset of JavaScript: all JavaScript code is valid TypeScript code so it can be added seamlessly to any project. The TypeScript compiler emits JavaScript.

What is the core concept of TypeScript? ›

What is TypeScript? TypeScript is a programming language built and maintained by Microsoft. It is a superset of JavaScript that adds strong type checking and is compiled into plain JavaScript code. Being a superset means that TypeScript has all the features of JavaScript as well as some additional features.

What are the different kinds of TypeScript? ›

TypeScript has two special types, null and undefined , that have the values null and undefined respectively. We mentioned these briefly in the Basic Types section. By default, the type checker considers null and undefined assignable to anything. Effectively, null and undefined are valid values of every type.

What are the three main simple types in TypeScript? ›

TypeScript Simple Types
  • boolean - true or false values.
  • number - whole numbers and floating point values.
  • string - text values like "TypeScript Rocks"

What does 3 dots mean in TypeScript? ›

These three dots are called the spread syntax or spread operator. The spread syntax is a feature of ES6, and it's also used in React. Spread syntax allows you to deconstruct an array or object into separate variables.

What is the best way to learn TypeScript? ›

Learn TypeScript by Codecademy is an excellent way to learn TypeScript through guided tutorials. In this free course, you'll apply the JavaScript syntax you already know to TypeScript's type system. By the end of the course, you'll be familiar with how TypeScript works.

What should I know before learning TypeScript? ›

The answer is that you can't learn TypeScript without learning JavaScript! TypeScript shares syntax and runtime behavior with JavaScript, so anything you learn about JavaScript is helping you learn TypeScript at the same time.

Is TypeScript a frontend or backend language? ›

TypeScript is neither a frontend or backend language, but rather a superset of the already established and well-known software language, JavaScript.

What is the structure of TypeScript? ›

TypeScript is a Structural Type System. A structural type system means that when comparing types, TypeScript only takes into account the members on the type. This is in contrast to nominal type systems, where you could create two types but could not assign them to each other.

Is TypeScript a language or framework? ›

TypeScript is a free and open source high-level programming language developed and maintained by Microsoft. It is a strict syntactical superset of JavaScript and adds optional static typing to the language. It is designed for the development of large applications and transpiles to JavaScript.

What is the difference between type and interface in TypeScript? ›

// One major difference between type aliases vs interfaces are that interfaces are open and type aliases are closed. This means you can extend an interface by declaring it a second time. // In the other case a type cannot be changed outside of its declaration.

What is the difference between JavaScript types and TypeScript types? ›

TypeScript is an object-oriented programming language developed by Microsoft Corporation, whereas JavaScript is the programming language for the web. TypeScript is an open-source language to build large-scale web apps, whereas JavaScript is a server-side programming language that helps to develop interactive web pages.

What is the difference between TypeScript and angular? ›

Since TypeScript is a programming language in its own right, the flexibility of TypeScript is difficult to compare to Angular, which is a framework. Frameworks exist to make particular tasks easier, and in Angular's case, the task is making SPAs.

Is TypeScript functional or OOP? ›

Although TypeScript is a superset of JavaScript, object-oriented programming in TypeScript differs from Object-oriented programming in JavaScript because, unlike JavaScript, TypeScript has full class support, has access modifiers, and type annotations like most object-oriented programming languages.

What is the difference between === and == in TypeScript? ›


= is called as assignment operator, == is called as comparison operator whereas It is also called as comparison operator. = does not return true or false, == Return true only if the two operands are equal while === returns true only if both values and data types are the same for the two variables.

How do TypeScript types work? ›

In TypeScript, we have two different universes: the value and the type spaces. The type space is where types are defined and used to enable the compiler to do all the great magic. And the value space is the values in our programs like variables, constants, functions, value literals, and things that we have in runtime.

What is $$ in TypeScript? ›

$ and also $$ are valid variable names in javascript with no special meaning whatsoever and thus also have no special meaning in typescript.

What is ${} in JavaScript? ›

A placeholder is represented by ${} , with anything within the curly brackets treated as JavaScript and anything outside the brackets treated as a string: const method = 'interpolation' const dynamicString = `This string is using ${method}.

What is '!' In JavaScript? ›

Logical NOT (!) The logical NOT ( ! ) (logical complement, negation) operator takes truth to falsity and vice versa. It is typically used with boolean (logical) values. When used with non-Boolean values, it returns false if its single operand can be converted to true ; otherwise, returns true .

How many hours does it take to learn TypeScript? ›

It takes about a month to learn the basics of TypeScript, assuming you study for at least one hour a day. Expect to spend at least six months studying TypeScript before you develop the skills you need to apply it in a professional development setting.

Can I learn TypeScript in a week? ›

If TypeScript is your first language, it will likely take you anywhere from 3 months to a year to learn. Mainly because you need to learn JavaScript and type systems as well! However, if you understand JavaScript and how type systems work, you can easily get the basics of TypeScript down within a day to a week.

Which is harder TypeScript or JavaScript? ›

All of these languages are great, but TypeScript has one key advantage over them that makes it more suitable for frontend development: TypeScript is far easier to learn for current JavaScript developers, mainly because it's just augmented JavaScript.

Should I learn Python or TypeScript? ›

In terms of raw performance, Typescript is much faster than Python. When coding memory-intensive tasks in Python, e.g games, that utilize high-end 3D graphics, the CPU begins to take a hit and there is a significant drop in performance. Unlike Typescript, Python is not asynchronous at its core.

Should I learn TypeScript or angular? ›

If you're working with Angular 2 — TypeScript is core to the framework, so it's strongly recommended to learn it before using Angular 2.

What is TypeScript for dummies? ›

What is TypeScript? TypeScript is a superset of JavaScript, meaning that it does everything that JavaScript does, but with some added features. The main reason for using TypeScript is to add static typing to JavaScript. Static typing means that the type of a variable cannot be changed at any point in a program.

Why do people prefer TypeScript over JavaScript? ›

TypeScript is better than JavaScript in terms of language features, reference validation, project scalability, collaboration within and between teams, developer experience, and code maintainability.

Why is everyone using TypeScript? ›

TypeScript extends JavaScript and improves the developer experience. It enables developers to add type safety to their projects. Moreover, TypeScript provides various other features, like interfaces, type aliases, abstract classes, function overloading, tuple, generics, etc.

What is the main advantage of TypeScript? ›

One of the biggest advantages of TypeScript is its code completion and IntelliSense. Intellisense provides active hints as code is added. Since Ionic itself is written in TypeScript as well, editors can present all the methods available and what they expect as arguments.

What is the best framework to use with TypeScript? ›

NestJS is the most popular TypeScript framework 2021, and the Angular module system inspires it. NestJS is one of the fastest-growing frameworks in the NodeJS ecosystem. It has even outgrown lots of other Node. js frameworks except for Koa and Express, and that is pretty fair comparing 2018 that it was introduced.

Is TypeScript a compiler or interpreter? ›

TypeScript is a strongly typed, object-oriented, compiled programming language that builds on JavaScript.

Will JavaScript be replaced by TypeScript? ›

Since this typed programming language was meant to work with JS, it will never replace JavaScript. It will always build on JS as a solid foundation. It is expected that TypeScript will keep growing in popularity for the foreseeable future as it offers many benefits to developers.

What type is JSON in TypeScript? ›

Introduction to TypeScript JSON type. The TypeScript comes up with the functionality of working with JSON Type data. JSON being the JavaScript Object Notation, is used to make a data model that is easy to write and read. We can easily analyze large and complex data set with this TypeScript JSON type.

What are the modules in TypeScript? ›

In TypeScript, just as in ECMAScript 2015, any file containing a top-level import or export is considered a module. Conversely, a file without any top-level import or export declarations is treated as a script whose contents are available in the global scope (and therefore to modules as well).

What are the components of TypeScript *? ›

The TypeScript language is internally divided into three main layers.
Components of TypeScript
  • Language.
  • The TypeScript Compiler.
  • The TypeScript Language Services.

What language is TypeScript written in? ›

TypeScript is JavaScript with syntax for types. TypeScript is a strongly typed programming language that builds on JavaScript, giving you better tooling at any scale.

Is TypeScript angular or React? ›

Angular JS is a TypeScript-based web application framework, whereas React JS is a JavaScript-based library. While talking about React JS vs Angular, Angular is a JS framework built using TypeScript, whereas React JS is a JS library built using JSX.

What paradigm is TypeScript? ›

TypeScript is a multi-paradigm programming language and, as a result, it includes many influences from both OOP languages and functional programming paradigms.

Should I use type or class TypeScript? ›

If you want to create and pass a type-checked class object, you should use TypeScript classes. If you need to work without creating an object, an interface is best for you.

What is difference between enum and object in TypeScript? ›

On the other hand, an enum is essentially an alias for a JavaScript object. It is both a type and a value at the same time, similar to how a class can act as both a type and an actual value in JavaScript.

What is the difference between class and object in TypeScript? ›

TypeScript class vs. TypeScript Interface
TypeScript Class
InstantiationA class can be instantiated to create an object.
MethodsThe methods of a class are used to perform a specific action.
Access SpecifierThe member of a class can be public, protected, or private.
ConstructorA class can have a constructor.
6 more rows

Why TypeScript is faster than JavaScript? ›

One of the primary ways TypeScript does this is by checking for static errors before the transpiled JavaScript code is run. So after transpiling down to JavaScript, part of the work has already been done. Alternatively, when running JavaScript code, the compiler might encounter errors, which slow down the process.

Does Facebook use TypeScript? ›

They do use TypeScript, sorta'. Many teams at Facebook, including the React team I believe, are using Flow in their work. The initial idea behind flow was to be a tool to provide static type checking to vanilla JS files. It has grown to be a more direct competitor to TypeScript, with Flow-specific syntax.

Why is TypeScript better than react? ›

Because TypeScript reduces the chances for errors, code libraries become much easier to use. In addition, the React library supports the type definitions seen with TypeScript and provides data binding. As a result, a developer can track changes made to different data segments.

What will replace JavaScript? ›

Dart is a Google product – an object-oriented programming language similar to C, created as a replacement for JavaScript. If you have experience working with Java, C or C++ you are likely to prefer dart over JavaScript.

Is TypeScript still relevant? ›

TypeScript has dominated the front-end developer experience by many, many accounts. By now you likely already know that TypeScript is a superset of JavaScript, building on JavaScript by adding syntax for type declarations, classes, and other object-oriented features with type-checking.

Is TypeScript advanced version of JavaScript? ›

On the other hand, TypeScript is an enhanced version of JavaScript. This means TypeScript is a combination of JavaScript and some other traits. TypeScript is an object-oriented programming language developed by Microsoft Corporation, whereas JavaScript is the programming language for the web.

Is TypeScript better than C++? ›

TypeScript has a broader approval, being mentioned in 954 company stacks & 1390 developers stacks; compared to C++, which is listed in 194 company stacks and 357 developer stacks.

Is TypeScript more powerful than JavaScript? ›

TypeScript is better than JavaScript in terms of language features, reference validation, project scalability, collaboration within and between teams, developer experience, and code maintainability.

Is TypeScript an OOP language? ›

TypeScript on the other hand can be treated as an object-oriented language because of the language constructs it introduces on top of JavaScript closures. In this chapter, we will discuss each of the core concepts behind object-oriented ...

Why do people use TypeScript over JavaScript? ›

TypeScript extends JavaScript, providing a better developer experience. The benefits of using TypeScript over JavaScript include: Static typing – TypeScript comes with optional static typing and a type inference system, which means that a variable, declared with no type may be inferred by TypeScript based on its value.

Is TypeScript easier than Python? ›

Features like generics and static typing make it easier to do functional programming in TypeScript than in Python. This could be an advantage because demand for functional code is growing due to developments in data science, parallel programming, asynchronous programming, and more.

What language is TypeScript most similar to? ›

Syntactically, TypeScript is very similar to JScript .NET, another Microsoft implementation of the ECMA-262 language standard that added support for static typing and classical object-oriented language features such as classes, inheritance, interfaces, and namespaces.

How long does it take to learn TypeScript? ›

If TypeScript is your first language, it will likely take you anywhere from 3 months to a year to learn. Mainly because you need to learn JavaScript and type systems as well! However, if you understand JavaScript and how type systems work, you can easily get the basics of TypeScript down within a day to a week.

Will TypeScript ever replace JavaScript? ›

Since this typed programming language was meant to work with JS, it will never replace JavaScript. It will always build on JS as a solid foundation. It is expected that TypeScript will keep growing in popularity for the foreseeable future as it offers many benefits to developers.

Is TypeScript used for backend or frontend? ›

Is TypeScript Frontend or Backend? TypeScript is neither a frontend or backend language, but rather a superset of the already established and well-known software language, JavaScript.

What problems does TypeScript solve? ›

TypeScript adds type support to JavaScript and catches type errors during compilation to JavaScript. Bugs that are caused by false assumptions of some variable being of a certain type can be completely eradicated if you play your cards right (how strict you type your code or if you type your code at all is up to you).

Can I learn TypeScript without knowing JavaScript? ›

The answer is that you can't learn TypeScript without learning JavaScript! TypeScript shares syntax and runtime behavior with JavaScript, so anything you learn about JavaScript is helping you learn TypeScript at the same time.

Why would you not use TypeScript? ›

By design TypeScript does no type checks at runtime.

Typically this means some duplication between the types you implement for compile-time checking and the types you build for run-time checking. Libraries like prop-types or io-ts help with defining type-checks at runtime.


Top Articles
Latest Posts
Article information

Author: Jerrold Considine

Last Updated: 19/09/2023

Views: 6360

Rating: 4.8 / 5 (78 voted)

Reviews: 93% of readers found this page helpful

Author information

Name: Jerrold Considine

Birthday: 1993-11-03

Address: Suite 447 3463 Marybelle Circles, New Marlin, AL 20765

Phone: +5816749283868

Job: Sales Executive

Hobby: Air sports, Sand art, Electronics, LARPing, Baseball, Book restoration, Puzzles

Introduction: My name is Jerrold Considine, I am a combative, cheerful, encouraging, happy, enthusiastic, funny, kind person who loves writing and wants to share my knowledge and understanding with you.