我在运行npm start时收到以下错误:
ES2015模块语法优于自定义TypeScript模块和命名空间@ typescript-eslint / no-namespace
namespace InternalThings {...}
我试图对此进行研究,但这非常令人困惑。
为什么会这样? 如何解决?
我试图在tsconfig.json上放置一些标志,但到目前为止没有成功;
答案 0 :(得分:6)
要解决此错误,请代替:
export namespace InternalThings {
export function myFunction() {
}
export class MyClass {
}
}
import { InternalThings } from './internal-things';
InternalThings.myFunction();
您可以直接公开名称空间的所有成员:
export function myFunction() {
}
export class MyClass {
}
,您可以这样导入它:
import * as InternalThings from './internal-things';
InternalThings.myFunction();
主要思想是模块的用户只能导入他们想要的内容,或以不同的方式命名您的模块:
import * as CustomModuleName from './internal-things';
CustomModuleName.myFunction();
import { MyClass } from './internal-things';
let field = new MyClass();
答案 1 :(得分:3)
这是一个棉绒错误,由以下棉绒规则引起:https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-namespace.md
如果您发现该规则有用并且想要保留它,则需要修改代码以使用import
和export
而不是名称空间。请参阅该规则的文档以了解哪些内容可以作为修复程序。
如果您喜欢该规则,但想禁用此行的规则,则在其上方添加以下内容:
// eslint-disable-next-line @typescript-eslint/no-namespace
如果您不喜欢该规则并想完全禁用它,请编辑.eslintrc文件以使其具有以下行:
rules: {
"@typescript-eslint/no-namespace": "off"
}
答案 2 :(得分:2)
错误来自eslint。您必须忽略配置中的“ @ typescript-eslint / no-namespace”规则,或使用ES6重写代码。
自定义TypeScript模块(模块foo {})和名称空间(名称空间) foo {})被认为是过时的组织TypeScript代码的方法。 现在首选使用ES2015模块语法(导入/导出)