我运行的是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.
3条答案
按热度按时间jv4diomz1#
对于Node 10及更高版本,最好使用strict assert,它可以导入为named import,并为了方便起见重命名为
as assert
:strict
是从内置的assert
模块中命名的导出。命名导出避免了问题中提到的许多问题,这些问题来自使用单个module.exports
CommonJS导出并将其导入为默认导入。在TypeScript 2.7中,添加了--esmoduleinterop
选项来帮助解决这个问题。剩下的是一个老答案,写于2016年:
如果从
node_modules
所在的目录运行typescript,则甚至不需要添加/// <reference ...
正如@Ryan Cavanaugh在评论中指出的那样,这种语法提示了一种假设,即它将在原生支持ES6模块的环境中工作(目前还不存在这样的环境)。这不是真的,ES6模块不可能同时用作命名空间和函数,所以我认为这种语法仍然更符合现实:
但你必须使用打字选项
以摆脱
Import with 'require' cannot be used when targeting ECMAScript 6 or higher
错误。如果需要,您也可以单独使用--target es5
选项。zour9fqk2#
首先,为Node.js安装TypeScript定义作为开发依赖项
然后,可以导入
assert
模块umuewwlo3#
我遇到了同样的问题,并切换到power-assert,它似乎可以很好地工作: