If the module has an export as namespace myLib then module already exports the library as a global object. So you can just use the library as:
let a:myLib.AnInterface;
let b = myLib.doThing1();
This is true as long as the file you are using the library in is not a module itself (ie it contains no import and no export statements).
export {} // module now
let a:myLib.AnInterface; // Types are still ok without the import
let b = myLib.doThing1(); // Expressions are not ok, ERR: 'myLib' refers to a UMD global, but the current file is a module. Consider adding an import instead.ts(2686)
You can add a property to Window that is the same type as the type of the library using an import type (added in 2.9 in believe)
// myLibGlobal.d.ts
// must not be a module, must not contain import/ export
interface Window {
myLib: typeof import('./myLib') // lib name here
}
//usage.ts
export {} // module
let a:myLib.AnInterface; // Types are still ok without the import (if we have the export as namespace
let b = window.myLib.doThing1(); // acces through window ok now
Edit
Apparently the Typescript team has actually been working on something for this very issue. As you can read in this PR the next version of typescript will include a allowUmdGlobalAccess flag. This flag will allow access to UMD module globals from modules. With this flag set to true, this code will be valid:
export {} // module now
let a:myLib.AnInterface; // Types are still ok without the import
let b = myLib.doThing1(); // ok, on [email protected]
This mean you can just access the module exports without the need for using window. This will work if the global export is compatible with the browser which I would expect it to be.