Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does the module keyword mean in typescript?

I'm trying to figure some things related to ES6 modules. How to use namespaces together with angular and typescript.

Assume the following code represents an angular directive. Does anyone know what the module keyword mean and how can you access MyClass in other file.

// file1.ts
module NSpace.Space {
   export class MyClass {
      constructor() { ... }
      ...
   }
}

I have tried accessing on another file using and re-exporting, however

// file2.ts
import {MyClass} from 'file1';

export {MyClass}

I get this error: error TS2306: File 'file.ts' is not a module

My questions are:

  • why do I get this?
  • what is this module keyword?
  • do we create ES6 modules only based on the directory structure or can we actually use this notation? module Space.Space1.Space2 ...

From what I've read and experienced so far it seems that ES6 modules are defined based on file structure, that's why I get this error.

I have not written this code, that's why I'm asking. Also it might be useful to mention that I'm using System.JS for importing.

like image 742
ipinak Avatar asked Nov 17 '15 08:11

ipinak


People also ask

What is module keyword?

Python provides an in-built module keyword that allows you to know about the reserved keywords of python. The keyword module allows you the functionality to know about the reserved words or keywords of Python and to check whether the value of a variable is a reserved word or not.

What is module in TypeScript?

A module is a way to create a group of related variables, functions, classes, and interfaces, etc. It executes in the local scope, not in the global scope. In other words, the variables, functions, classes, and interfaces declared in a module cannot be accessible outside the module directly.

Which keyword is used to declare a module in TypeScript?

Syntax. To use the declared module in another file, an import keyword is used as given below. The file name is only specified no extension used.

What does module mean in JavaScript?

A module in JavaScript is just a file containing related code. In JavaScript, we use the import and export keywords to share and receive functionalities respectively across different modules. The export keyword is used to make a variable, function, class or object accessible to other modules.


1 Answers

The module keyword in TypeScript caused a bit of confusion, so it is going to be renamed namespace.

Rather than use namespaces, though, you can organise your code by files / file system (which means the actual file location will match the perceived namespace. This is how "exteral modules" (TypeScript) work - and also how ECMAScript 2015 modules work.

So with a quick adjustment, you'll have:

// file1.ts
export class MyClass {
   constructor() { ... }
   ...
}

And then this will work:

import {MyClass} from 'file1';

If you compile targeting ES6, you'll notice that this line of code needs no translation, it matches the standard for module imports. If you target ES5 or lower, TypeScript will transform this statement for you (you can choose the transformation using the --module flag.

I tend to use the UMD compilation option, which means the output will work in web browsers (with RequireJS) or on Node. System JS is actually gaining a lot of traction currently, so you may want to consider that too. Eventually, browsers will simply natively support module loading.

like image 66
Fenton Avatar answered Oct 07 '22 07:10

Fenton