Difference Between var and let In Typescript

1. Introduction

This post provides a clear and concise explanation of the differences between var and let in TypeScript, complete with examples, outputs, and guidelines on when to use each.

The var keyword declares a variable in the function scope or globally if declared outside of a function. let, introduced in ES6, declares a variable in the block scope, providing more control and reducing the chances of errors due to variable hoisting and redeclaration.

2. Key Points

1. Scope: var is function-scoped, let is block-scoped.

2. Hoisting: Variables declared with var are hoisted, let declarations are not hoisted in the same way.

3. Re-declaration: var allows re-declaration in the same scope, let does not allow re-declaration in the same scope.

4. Global Object Property: In a global context, var declares a global object property, let does not.

3. Differences

Characteristic Var Let
Scope Function scope Block scope
Hoisting Hoisted to the top of their scope Not hoisted in the same way
Re-declaration Allows re-declaration Does not allow re-declaration
Global Object Property Global if declared outside function Does not create global object property

4. Example

// Example of Var
function varTest() {
    if (true) {
        var x = 1;
    console.log(x); // x is accessible here

// Example of Let
function letTest() {
    if (true) {
        let y = 1;
    console.log(y); // Error: y is not accessible here


Var Output:
1 (accessible outside of the if block)
Let Output:
Error (y is not accessible outside of the if block)


1. In the varTest function, x is accessible outside the if block due to the function scoping of var.

2. In the letTest function, y is not accessible outside the if block because let has block scoping, which prevents y from being used outside the block where it was declared.

5. When to use?

- Use var in scenarios where function scope is required or in legacy codebases where ES6 features like block scope are not supported.

- Prefer let in modern TypeScript development for better control over variable scope and to avoid unintentional errors related to variable hoisting and re-declarations.