web-dev-qa-db-ja.com

タイプスクリプトのインポート/ as vsインポート/ require?

Express/Node.jsでTypeScriptを使用しています。

モジュールを使用する場合、TypeScriptハンドブックには次の構文が表示されます。

import express = require('express');

しかし、TypeScript.d.tsファイルも示しています:

import * as express from "express";

MSDNブログも検索しましたが、何も見つかりませんでした。

2016年初頭の時点でどちらが正しいですか? 2つの違いはありますか?

使用する最新の構文に関する情報を見つけるのに最適なソースはどこにあるので、将来この情報を見つけることができますか?

63
Adam Thompson

これらはほとんど同等ですが、import *にはimport ... = requireにはない制限がいくつかあります。

import * asは、モジュールオブジェクトオブジェクトを重視した識別子を作成します。 ES6仕様によると、このオブジェクトは決して呼び出し可能またはnewableではありません-プロパティのみを持ちます。関数またはクラスをインポートしようとしている場合は、使用する必要があります

import express = require('express');

または(モジュールローダーによって異なります)

import express from 'express';

ES6の仕様では、import * as expressを使用してからexpress()を呼び出すことは常に違法です。いくつかのランタイム+トランスピレーション環境では、これはとにかく動作する可能性がありますが、警告なしに将来の任意の時点で壊れる可能性があり、あなたを悲しませます。

100
Ryan Cavanaugh
import * as express from "express";

これは、昨年からJavaScriptの標準(ES6/2015)であるため、推奨される方法です。

いずれにしても、tsconfig.jsonファイルで、nodejsでサポートされている形式であるcommonjsをモジュールオプションの対象にする必要があります。

10
thitemple