typescript - “不能在没有新的情况下调用类”和“不能重新声明阻塞范围的变量”同时发生
问题描述
我在尝试使用 RESTDataSource 时开始出现错误:
"Class constructor RESTDataSource cannot be invoked without 'new'"
所以我尝试了这个解决方案并添加了"target": "es2016"
. 我不再收到错误消息。
但现在我收到打字稿编译错误
error TS2451: Cannot redeclare block-scoped variable 'Query'.
显然这是因为打字稿无法将我的文件识别为模块。
所以我尝试了这个解决方案并将其添加export {}
到我的文件中,以便它们被识别为模块。但是因为我的目标是es2016
我得到Unexpected token 'export'
有什么办法可以同时解决这两个问题?
错误发生在我的代码中,所以我将包括整个回购:https ://github.com/grochadc/filex-graphql-server
tsconfig.json
{
"compilerOptions": {
"target": "es2016",
"moduleResolution": "node",
"outDir": "dist/",
"allowSyntheticDefaultImports": true
},
"include": ["src/"],
"exclude": ["node_modules", "**/*.spec.ts"]
}
解决方案
如果您有以下 Node/CommonJS 代码:
var foo = require("foo"); foo.doStuff();
那么您将编写以下 TypeScript 代码:
import foo = require("foo"); foo.doStuff();
并用于出口
你以前可能这样写过:
function foo() { // ... } module.exports = foo;
在 TypeScript 中,您可以使用 export = 构造对其进行建模。
function foo() { // ... } export = foo;
然后,如果您"module": "CommonJS"
在 tsconfig 中进行设置,它会将这些转换回您现在拥有的内容,这是一个遗留限制,如果您没有导入或导出构造,它会假定它不是模块,因此您只需要标记您的文件通过使用import
和作为模块export
推荐阅读
- mysql - 错误 1396 - 操作 CREATE USER 失败
- spring-boot - 如何知道spring-boot项目中使用了哪些版本的hibernate/spring数据?
- javascript - 检查div是否可见并在单击外部时关闭
- laravel - Laravel Excel - 如何使用过滤器将数据导出到 csv?
- bash - 变量扩展的问题。获取一个变量成要回显的变量名
- html - 选择被箭头水平切断的文本
- haskell - 有人可以用*非常*简单的术语解释反射包 API 吗?
- c# - 在 C# 中管理 Windows 7 平板电脑设置
- angular - 如何以角度从json对象导出excel某些特定列
- php - 如何在单元测试中测试多个类对象双打