TypeScript 2.0 /ES 2015从Node.js导入assert的方法是什么?

hgb9j2n6  于 2023-04-22  发布在  TypeScript
关注(0)|答案(3)|浏览(123)

我运行的是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.

jv4diomz

jv4diomz1#

对于Node 10及更高版本,最好使用strict assert,它可以导入为named 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所在的目录运行typescript,则甚至不需要添加/// <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错误。如果需要,您也可以单独使用--target es5选项。

zour9fqk

zour9fqk2#

首先,为Node.js安装TypeScript定义作为开发依赖项

npm i -D @types/node

然后,可以导入assert模块

import * as assert from 'assert';
umuewwlo

umuewwlo3#

我遇到了同样的问题,并切换到power-assert,它似乎可以很好地工作:

import assert from 'power-assert'

相关问题