web-dev-qa-db-ja.com

NodeJS / TypeScriptエクスポート/インポートの適切な説明?

Typescriptを使用してNodeJSでエクスポートとインポートがどのように機能するかを誰かが正確に説明できますか?

私の設定は:

  • NodeJS
  • TypeScriptのすべて
  • TSLint
  • タイピング

私はいくつかの適切なコーディングをする代わりにエクスポート/インポートをいじっています、それは私を混乱させ、それがどのように機能するかの適切な説明を見つけることができません。

インポート

以下について説明してください。

var module = require ("module");

import module = require("module");

import module from "module";

import {something} from "module";

import * as module from "module";

エクスポート

以下について説明していただけますか

export = something;

export default something;

export interface|class something;

質問

  • クラスを開始せずに適切にエクスポート/インポートする方法
  • 開始された状態でクラスを適切にエクスポート/インポートする方法(構築は実行されました)
  • クラスとインターフェースを適切にエクスポート/インポートするには
  • クラスと複数のインターフェースを適切にエクスポート/インポートする方法
  • モジュール宣言を使用する場合、それらは何のために役立ちますか。また、使用しようとすると、tslintがエラーをスローするのはなぜですか。

エクスポートとインポートの適切な方法を見つけることができないようです。そのため、IDEは赤でカバーされておらず、何百ものエラーを投げています。

一般的な質問

  • Nodejs/TypeScript/tslintを使用してエラーが発生しないようにする方法さえありますか?
  • TSLintは、入力したほとんどすべてのことについて私に向かって叫んでいます...ほとんどのエラーには説明がないため、それは非常にイライラするです。それを使用する価値さえありますか?

質問のリストはどんどん続きますが、上記のいくつかが答えられたら、私は残りを拾うことができると確信しています。

このような一般的な質問をありがとうと申し訳ありませんが、私の欲求不満のレベルはちょうどトップに達しました...

30
Tomas

同意し、インポート/エクスポートの構文は、少なくとも2つの理由で混乱しています。

  • commonjs構文:var module = require ("module");は機能しますが、それはcommonjsです->タイプなし
  • 変更:構文import x = require('y')がTSで廃止されました

TL; DR;:TS 1.5で導入された「es6スタイル」構文を使用します

私が知っているTSのインポート/エクスポートの「最良の」リソースは this です

全体的に私はこれを読むことをお勧めします 優れたハンドブック これはあなたの質問のほとんどに対する答えを提供します

インポートするには

デフォルトのエクスポートから

Somethingはデフォルト(単一)のエクスポートとしてエクスポートされました。つまり、ts/es6のexport default Something

使用する

import Something from "module"

実際には、別の名前でデフォルトのエクスポートをインポートできます。 import SomethingElse from 'module'も機能します

名前付きエクスポートから

Somethingは、ts/es6のexport {Something}またはexport class|interface Something{}を使用して、「モジュール」の名前付きエクスポートとしてエクスポートされました

それだけをインポートしたい場合は、

import {Something} from "module"    

名前空間modの「モジュール」からエクスポートされたすべてのものをインポートしたい

import * as mod from "module

次にconst c:mod.Something = whateverを使用します

輸出する

上記のimportsを参照

フォームexport = somethingは廃止され、新しいES6スタイルの構文が採用されました。ほとんどの場合、jsライブラリが単一の関数/オブジェクトをエクスポートするという事実を表すために、定義ファイルに含まれています。 module.exports=something

あなたが使用してみるべきこと

ES6スタイルの構文を使用し、defaultエクスポートを避けます。これらには、別の名前を使用してインポートできるという利点がありますが、

  • デフォルトのインポートは再エクスポートできません。これは、ライブラリを作成している場合に問題になる可能性があります
  • 彼らはリファクタリング時に多くのIDE(あなた自身は言うまでもありません)を混乱させます
  • 名前付きエクスポートは、インポート時に実際にローカルで名前を変更できます。つまり、import {Something as SomethingElse} from "module"

具体的には、エクスポートする必要のあるものをすべてエクスポートし、具体的にインポートします

api.ts

export interface MyInterface {
}

export class MyClass {
}

main.ts

 import {MyInterface, MyClass} from './api'

リンティング

優れたリンティングを提供する優れたIDEはたくさんあります:VSCode、Atom TypeScriptとWebstormで人気のあるものをいくつか挙げます。最初の2つは無料で、3つ目はインポートを管理します。

12
Bruno Grieder