web-dev-qa-db-ja.com

TypeScriptは関数をエクスポートできますか?

TypeScriptモジュールから単純な関数をエクスポートすることは可能ですか?

これは私のためにコンパイルされていません。

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

このワークアイテム は、あなたがそれを言うことはできませんが、平らにしないことを暗示しているようです。それは不可能ですか?

40
George Mauer

その例で何を目指しているかを伝えるのは難しいです。 exports =externalモジュールからのエクスポートに関するものですが、リンクしたコードサンプルはinternalモジュール。

経験則:module foo { ... }を記述する場合、内部モジュールを記述します。ファイルのトップレベルでexport something somethingを記述する場合、外部モジュールを記述しています。あなたが実際にexport module fooをトップレベルで書くことは少しまれです(名前を二重にネストするため)、そしてトップレベルのエクスポートを持つファイルでmodule fooを書くことはさらにまれですfooは外部からは見えません)。

次のことは理にかなっています(各シナリオは水平方向のルールで区切られています)。


// 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
57
Ryan Cavanaugh

最初にGoogleに表示されるため、質問のタイトルに直接回答するには:

はい、TypeScriptは関数をエクスポートできます!

TSドキュメンテーションからの直接引用はここにあります:

「exportキーワードを追加することで、任意の宣言(変数、関数、クラス、型エイリアス、インターフェイスなど)をエクスポートできます。」

参照リンク

3
Ray Hulha

私の場合、私はこれを次のようにしています:

 module SayHi {
    export default () => { console.log("Hi"); }
 }
 new SayHi();
0
user9303491

これをAngularに使用している場合、名前付きエクスポートを使用して関数をエクスポートします。といった:

function someFunc(){}

export { someFunc as someFuncName }

それ以外の場合、Angularはオブジェクトが関数ではないことを訴えます。

0
Eli