javascripttypescriptsyntaxtypescript-module-resolution

Can typescript export a function?


Is it possible to export a simple function from a typescript module?

This isn't compiling for me.

module SayHi {
    export function() {
    console.log("Hi");
  }
}
new SayHi();

This workitem seems to imply that you cannot but doesn't flat out say it. Is it not possible?


Solution

  • It's hard to tell what you're going for in that example. exports = is about exporting from external modules, but the code sample you linked is an internal module.

    Rule of thumb: If you write module foo { ... }, you're writing an internal module; if you write export something something at top-level in a file, you're writing an external module. It's somewhat rare that you'd actually write export module foo at top-level (since then you'd be double-nesting the name), and it's even rarer that you'd write module foo in a file that had a top-level export (since foo would not be externally visible).

    The following things make sense (each scenario delineated by a horizontal rule):


    // An internal module named SayHi with an exported function 'foo'
    module SayHi {
        export function foo() {
           console.log("Hi");
        }
    
        export class bar { }
    }
    
    // N.B. this line could be in another file that has a
    // <reference> tag to the file that has 'module SayHi' in it
    SayHi.foo();
    var b = new SayHi.bar();
    

    file1.ts

    // This *file* is an external module because it has a top-level 'export'
    export function foo() {
        console.log('hi');
    }
    
    export class bar { }
    

    file2.ts

    // This file is also an external module because it has an 'import' declaration
    import f1 = module('file1');
    f1.foo();
    var b = new f1.bar();
    

    file1.ts

    // This will only work in 0.9.0+. This file is an external
    // module because it has a top-level 'export'
    function f() { }
    function g() { }
    export = { alpha: f, beta: g };
    

    file2.ts

    // This file is also an external module because it has an 'import' declaration
    import f1 = require('file1');
    f1.alpha(); // invokes f
    f1.beta(); // invokes g