什么是从Node.js导入断言的TypeScript 2.0 / ES2015方式?

时间:2016-10-05 21:26:29

标签: typescript typescript-typings

我正在运行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 个答案:

答案 0 :(得分:27)

对于节点10及更高版本,最好使用strict assertnamed import可以导入named export并为方便起见重命名as assert

import { strict as assert } from 'assert';

assert.ok(true);

assert(true);

strict是来自内置assert模块的--esmoduleinterop。命名导出避免了问题中提到的许多问题,即使用单module.exports CommonJS导出并将其作为默认导入导入的问题。在TypeScript 2.7中,添加了https://docs.djangoproject.com/en/1.10/ref/settings/#file-upload-settings选项以帮助完成此操作。

其余的是旧答案,写于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错误。如果您需要的话,也可以单独使用--target es5选项。

答案 1 :(得分:3)

首先,安装TypeScript

Node.js个定义
npm i @types/node

然后,您可以导入assert模块: - )

import * as assert from 'assert';

答案 2 :(得分:0)

我遇到了同样的问题,并切换到power-assert,似乎可以正常使用:

import assert from 'power-assert'
相关问题