39

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

私のセットアップは次のとおりです。

  • NodeJS
  • タイプスクリプトのすべて
  • 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 は、私が入力したほとんどすべてのことに対して叫び声を上げています...ほとんどのエラーには説明がないため、非常にイライラします。それを使う価値さえありますか?

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

ありがとうございます。一般的な質問で申し訳ありませんが、私のフラストレーションは最高潮に達しました...

4

1 に答える 1

18

少なくとも 2 つの理由から、インポート/エクスポートの構文は混乱を招きます。

  • commonjs 構文:var module = require ("module");機能しますが、それは commonjs です -> 入力なし
  • 変更: 構文import x = require('y') は TS で非推奨になりました

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

私が知っているTSでのインポート/エクスポートに関する「最高の」リソースはこれです

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

インポートするには

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

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

使用する

import Something from "module"

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

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

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

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

import {Something} from "module"    

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

import * as mod from "module

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

輸出する

import上記参照

このフォーム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'

リンティング

VSCode、Atom Typescript、Webstorm など、優れたリンティングを提供する優れた IDE が数多くあります。最初の 2 つは無料で、3 つ目はインポートを管理してくれます。

于 2016-02-17T12:01:47.340 に答える