22

typescriptを使用してnodejsにモジュールをインポートするためのベストプラクティスは何ですか?私はC#のバックグラウンドから来ているので、このようなことをしたいです

MyClass.ts

module MyNamespace {
    export class MyClass {
    }
}

app.ts

// something like using MyNamespace
new MyNamespace.MyClass();

また

MyClass.ts

export class MyClass {
}

app.ts

import MyClass = module("MyClass")
new MyClass();

私はこれができることを知っています、そしてそれはうまくいくでしょう、しかしそれから私は各クラスのために2つの名前を考えなければなりません

import MyClass2 = module("MyClass")
new MyClass2.MyClass();

ポイントは、クラスを複数の.tsファイル(できればクラスごとに1つのファイル)に分割することです。質問は、これはどのように行われるのかということです。

4

3 に答える 3

16

ここには 2 つの選択肢があります。

CommonJS または AMD モジュールの使用を主張する場合は、質問で説明したとおりに外部モジュールを使用する必要があります。モジュールを使用して独自の名前空間を宣言するかどうかは、ほとんど好みの問題です。2 つの名前を指定するという問題を回避する唯一の方法は、型に別名を付ける変数を作成することです。

mymodule.ts

export module MyNamespace {
    export class MyClass {
    }
}

app.ts

import ns = require('mymodule');
var myclass = new ns.MyNamespace.MyClass();
var myclassalias = ns.MyNamespace.MyClass;
var myclass2 = new myclassalias();

他のオプションは、コードを内部的に構造化するために主に使用される内部モジュールを使用することです。内部モジュールは、参照パスを使用してコンパイル時にスコープに取り込まれます。

mymodule.ts

module MyNamespace {
    export class MyClass {
    }
}

app.ts

///<reference path='mymodule.ts'/>
var myclass = new MyNamespace.MyClass();

これら 2 つのアプローチのどちらがより適切かは、ご自身で判断する必要があると思います。

于 2012-10-18T16:06:22.970 に答える
2

この特定の目的のために作成されたtypescript-requireモジュールを使用して、TypeScript モジュールを node.js ファイルにインポートできます。

于 2013-01-02T01:05:45.483 に答える
2

明示的なmodule(または) キーワードを使用しないことをお勧めしますnamespace。これは以前の痕跡です。2 番目のmyModule.ts の例は良かったです。 importexport

export class MyClass {
   ...
}

しかし、それを別の typescript モジュールにインポートするときは、次のようなものを使用したいと思うでしょう:

import { MyClass } from './myModule';
var myInstance = new MyClass();

個人的には、1 行目の繰り返しが好きではありませんが、それは言語が要求するものなので、それを受け入れることを学びました。クラスごとのファイルのパターンを放棄しない限り、この構文の有用性は明らかではないと思います。意図しない名前空間の汚染が発生しないように、モジュールからインポートする名前を選択します。

別のインポート構文では、モジュールからすべての名前を取得しますが、名前を使用するときはモジュールで名前を修飾する必要があります。したがって、名前衝突耐性もあります。

import * as myModule from './myModule';
var myInstance = new myModule.MyClass();

module/キーワードを必要としないという一般的な規則には例外がありますがnamespace、それらに注目することから始めないでください。file == moduleと考えてください。

于 2017-05-19T03:36:26.610 に答える