Ответ 1
Для узла 10 и выше лучше использовать строгий assert, который можно импортировать как именованный import и переименовать для удобства as assert
:
import { strict as assert } from 'assert';
assert.ok(true);
assert(true);
strict
именованный экспорт из встроенного модуля assert
. Именованный экспорт позволяет избежать многих проблем, упомянутых в этом вопросе, - проблем, возникающих при использовании одного module.exports
Экспорт CommonJS-экспорта и импорт в качестве импорта по умолчанию. В TypeScript 2.7 была добавлена опция --esmoduleinterop
чтобы помочь с этим. Остальное - старый ответ, написанный в 2016 году:
import * as assert from 'assert';
assert.ok(true);
assert(true);
Если вы запускаете машинопись из того же каталога, где находится node_modules
, вам даже не нужно добавлять ///<reference...
Как отметил @Ryan Cavanaugh в комментарии, этот синтаксис предполагает, что он будет работать в среде, в которой модули ES6 изначально поддерживаются (такой среды еще не существует). Это неправда, невозможно иметь модуль ES6, который можно использовать и как пространство имен, и как функцию, поэтому я думаю, что этот синтаксис все еще лучше соответствует реальности:
import assert = require('assert');
но вы должны использовать параметры машинописи
--target es6 --module commonjs
избавиться от Import with 'require' cannot be used when targeting ECMAScript 6 or higher
ошибку Import with 'require' cannot be used when targeting ECMAScript 6 or higher
. Вы также можете использовать только --target es5
если это то, что вам нужно.