Bur*_*ris 25 typescript typescript-typings
我正在运行TypeScript 2.0.3,配置为"target": "es2015",
.我开始了
/// <reference path="../../node_modules/@types/node/index.d.ts" />
import assert = require('assert');
Run Code Online (Sandbox Code Playgroud)
但是在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';
Run Code Online (Sandbox Code Playgroud)
哪个生成 Error TS2305 Module '"assert"' has no exported member 'assert'.
我也尝试过:
/// <reference path="../../node_modules/@types/node/index.d.ts" />
import assert from 'assert';
Run Code Online (Sandbox Code Playgroud)
哪个生成 Error TS1192 Module '"assert"' has no default export.
art*_*tem 37
对于节点10及更高版本,最好使用strict assert,它可以作为命名import导入并为方便起见重命名as assert
:
import { strict as assert } from 'assert';
assert.ok(true);
assert(true);
Run Code Online (Sandbox Code Playgroud)
strict
是内置模块的命名导出assert
.命名导出避免了问题中提到的许多问题,即使用单个module.exports
CommonJS导出并将其作为默认导入导入的问题.在TypeScript 2.7中,--esmoduleinterop
添加了选项以帮助完成此操作.
其余的是旧答案,写于2016年:
import * as assert from 'assert';
assert.ok(true);
assert(true);
Run Code Online (Sandbox Code Playgroud)
如果你从同一个目录运行typescript node_modules
,你甚至不需要添加/// <reference ...
作为@Ryan卡瓦诺在评论指出,这句法提示的假设,它会在ES6模块的原生支持的环境中工作(没有这样的环境还不存在).事实并非如此,不可能将ES6模块用作命名空间和函数,所以我认为这种语法仍然可以更好地匹配现实:
import assert = require('assert');
Run Code Online (Sandbox Code Playgroud)
但你必须使用typescript选项
--target es6 --module commonjs
Run Code Online (Sandbox Code Playgroud)
摆脱Import with 'require' cannot be used when targeting ECMAScript 6 or higher
错误.--target es5
如果您需要,您也可以单独使用选项.
首先,安装TypeScript
的定义Node.js
npm i @types/node
Run Code Online (Sandbox Code Playgroud)
然后,您可以导入assert
模块:-)
import * as assert from 'assert';
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8011 次 |
最近记录: |