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.
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.
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';
J'ai eu le même problème, et est passé à power-assert qui semble bien fonctionner avec:
import assert from 'power-assert'