我在运行 npm start 时收到以下错误:
ES2015 module语法优于自定义 TypeScript module和命名空间 @typescript-eslint/no-namespace
namespace InternalThings {...}
我试图研究这个,但它非常令人困惑。
为什么会发生这种情况?如何解决?
我试图在我的 tsconfig.json 上放置一些标志,但到目前为止没有成功;
我在运行 npm start 时收到以下错误:
ES2015 module语法优于自定义 TypeScript module和命名空间 @typescript-eslint/no-namespace
namespace InternalThings {...}
我试图研究这个,但它非常令人困惑。
为什么会发生这种情况?如何解决?
我试图在我的 tsconfig.json 上放置一些标志,但到目前为止没有成功;
这是一个 lint 错误,由这个 lint 规则引起:https : //github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-namespace.md
如果您发现该规则有用并希望保留它,那么您需要修改代码以使用import
andexport
而不是命名空间。请参阅规则的文档以了解什么是修复。
如果您喜欢该规则,但想禁用此行的规则,请在其上方添加以下内容:
// eslint-disable-next-line @typescript-eslint/no-namespace
如果您不喜欢该规则并希望完全禁用它,请编辑您的 .eslintrc 文件以包含以下行:
rules: {
"@typescript-eslint/no-namespace": "off"
}
要修复此错误,而不是:
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();
主要思想是您的module的用户可以只导入他们想要的内容,或者以不同的方式命名您的module:
import * as CustomModuleName from './internal-things';
CustomModuleName.myFunction();
import { MyClass } from './internal-things';
let field = new MyClass();
错误来自 eslint。您必须在配置中忽略“@typescript-eslint/no-namespace”规则或使用 ES6 重写代码。
自定义 TypeScript module(module foo {})和命名空间(命名空间 foo {})被认为是过时的组织 TypeScript 代码的方法。ES2015 module语法现在是首选(导入/导出)