web-dev-qa-db-fra.com

Quelle est la méthode TypeScript 2.0/ES2015 pour importer assert de Node.js?

J'exécute TypeScript 2.0.3, configuré avec "target": "es2015",. J'ai commencé avec

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

Mais dans Visual Studio, cela est signalé par une info-bulle disant Import with 'require' cannot be used when targeting ECMAScript 6 or higher. J'ai ensuite essayé:

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

Qui génère Error TS2305 Module '"assert"' has no exported member 'assert'.

J'ai aussi essayé:

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

Qui génère Error TS1192 Module '"assert"' has no default export.

18
Burt_Harris

Pour les nœuds 10 et supérieurs, il est préférable d’utiliser strict assert qui peut être importé sous le nom named import et renommé par commodité as assert:

import { strict as assert } from 'assert';

assert.ok(true);

assert(true);

strict est un nommé export from module assert intégré. Les exportations nommées évitent bon nombre des problèmes mentionnés dans la question, ceux qui résultent de l’utilisation d’une seule exportation module.exports CommonJS et de son importation par défaut. Dans TypeScript 2.7, l’option --esmoduleinterop a été ajoutée pour vous aider.

Le reste est une vieille réponse écrite en 2016:

import * as assert from 'assert';

assert.ok(true);

assert(true);

Si vous exécutez TypeScript à partir du même répertoire que node_modules, vous n'avez même pas besoin d'ajouter /// <reference ....

Comme @Ryan Cavanaugh l'a noté dans le commentaire, cette syntaxe laisse supposer qu'elle fonctionnera dans un environnement où les modules ES6 sont pris en charge de manière native (aucun environnement de ce type n'existe encore). Ce n'est pas vrai, il n'est pas possible d'avoir un module ES6 qui puisse être utilisé à la fois comme espace de nom et comme fonction. Je pense donc que cette syntaxe correspond mieux à la réalité:

import assert = require('assert');

mais vous devez utiliser les options TypeScript 

 --target es6 --module commonjs

se débarrasser de l'erreur Import with 'require' cannot be used when targeting ECMAScript 6 or higher. Vous pouvez également utiliser uniquement l'option --target es5 si c'est ce dont vous avez besoin.

23
artem

Commencez par installer les définitions TypeScript pour Node.js

npm i @types/node

Ensuite, vous pouvez importer le module assert :-)

import * as assert from 'assert';
2
Yas

J'ai eu le même problème, et est passé à power-assert qui semble bien fonctionner avec:

import assert from 'power-assert'
0
James McLaughlin