πŸ’‘ This page contain affiliate links. By making a purchase through them, we earn a commission at no extra cost to you.

3+1 Ways to Declare Global Variables in TypeScript

Ferenc Almasi β€’ 2022 September 20 β€’ πŸ“– 3 min read

To declare global variables in TypeScript, create a type definition file ending with .d.ts, and use the declare var syntax to declare global variables.

declare var app: {
    create(): void
}

// Now you can use without type errors:
app.create()
global.d.ts
Copied to clipboard!

As long as you createΒ .d.ts files within your TypeScript project, TypeScript will automatically pick it up to use it as a type definition file.

Looking to improve your skills? Master TypeScript from start to finish.
Master TypeScript

Using "declare global"

If you would like to define all global variables within a single object, you can use the declare global syntax, where you need to define all global variables within a global type.

declare global {
    var app: {
        create(): void
    }
}

// Access global variables both with and without referencing the window
app.create()
window.app.create()
global.d.ts
Copied to clipboard!

If you run into the following error: "Augmentations for the global scope can only be directly nested in external modules or ambient module declarations.", you will be able to resolve it by addingΒ export {}Β to the module.

export {}

declare global {
    var app: {
        create(): void
    }
}
global.d.ts
Copied to clipboard!

Extending the Window Interface

Another way to declare global variables in TypeScript is to extend the built-in Window interface. Instead of using the declare keyword, we need to define an interface called Window, and add our global types on top of it.

interface Window {
    app: {
        create(): void
    }
}

// βœ”οΈ Access through the window object
window.app.create()

// ❌ Cannot find name 'app'.
app.create()
global.d.ts
Copied to clipboard!

TypeScript will automatically merge this interface with the built-in Window interface so you will have both the existing and new types. However, this way you will only be able to access global variables through referencing window. If you try to simply write app.create, you may run into errors.

Looking to improve your skills? Master TypeScript from start to finish.
Master TypeScript

+1: Using Type Assertion

Lastly, as a quick and easy solution, you can also use type assertion to use global variables in a type-safe way. However, be warned that this is not the recommended way to use global variables in TypeScript, you should only use it as a last resort or in exceptional cases.

// Prevent TypeScript to throw errors for global types
(window as any).app.create()
Copied to clipboard!

The downside of using type assertion is that you need to use it each time you are referencing a global variable. For a generic approach, you can use the any type, however, this will prevent proper type checking for your global variables. Both app and its create method are now typed as any.

Did you find this page helpful?
πŸ“š More Webtips
Frontend Course Dashboard
Master the Art of Frontend
  • check Unlimited access to hundred of tutorials
  • check Access to exclusive interactive lessons
  • check Remove ads to learn without distractions
Become a Pro

Recommended