web-dev-qa-db-ja.com

Node.jsからアサートをインポートするTypeScript 2.0 / ES2015の方法は何ですか?

TypeScript 2.0.3を実行していますが、"target": "es2015",。で始めました

/// <reference path="../../node_modules/@types/node/index.d.ts" />
import assert = require('assert');

しかし、Visual Studioでは、Import with 'require' cannot be used when targeting ECMAScript 6 or higher.その後、私は試した:

/// <reference path="../../node_modules/@types/node/index.d.ts" />
import {assert} from 'assert';

生成するError TS2305 Module '"assert"' has no exported member 'assert'.

私も試しました:

/// <reference path="../../node_modules/@types/node/index.d.ts" />
import assert from 'assert';

生成するError TS1192 Module '"assert"' has no default export.

24
Burt_Harris

Node 10以上では、 strict assert を使用することをお勧めします。これは named import としてインポートでき、_as assert_:

_import { strict as assert } from 'assert';

assert.ok(true);

assert(true);
_

strictは、組み込みのassertモジュールからの named export です。名前付きエクスポートは、単一の_module.exports_ CommonJSエクスポートを使用し、それをデフォルトインポートとしてインポートすることから生じる問題の多くの問題を回避します。 TypeScript 2.7では、それを支援するために _--esmoduleinterop_ オプションが追加されました。

残りは2016年に書かれた古い答えです:

_import * as assert from 'assert';

assert.ok(true);

assert(true);
_

_node_modules_と同じディレクトリからTypeScriptを実行する場合は、_/// <reference ..._を追加する必要さえありません。

@Ryan Cavanaughがコメントで指摘したように、この構文は、ES6モジュールがネイティブにサポートされている環境で動作するという仮定を促します(そのような環境はまだ存在しません)。真実ではありません。名前空間と関数の両方として使用できるES6モジュールを使用することはできないため、この構文は実際にもっとよく一致すると思います。

_import assert = require('assert');
_

ただし、TypeScriptオプションを使用する必要があります

_ --target es6 --module commonjs
_

_Import with 'require' cannot be used when targeting ECMAScript 6 or higher_エラーを取り除くため。必要な場合は、_--target es5_オプションのみを使用することもできます。

35
artem

まず、Node.jsTypeScript定義をインストールします

npm i @types/node

次に、assertモジュールをインポートできます:-)

import * as assert from 'assert';
4
Yas

私は同じ問題を抱えていて、 power-assert に切り替えました。

import assert from 'power-assert'
0