ES2015模块语法优于自定义TypeScript模块和名称空间@ typescript-eslint / no-namespace

时间:2019-10-07 13:46:59

标签: javascript node.js reactjs typescript

我在运行npm start时收到以下错误:

ES2015模块语法优于自定义TypeScript模块和命名空间@ typescript-eslint / no-namespace

    namespace InternalThings {...}

我试图对此进行研究,但这非常令人困惑。

为什么会这样? 如何解决?

我试图在tsconfig.json上放置一些标志,但到目前为止没有成功;

3 个答案:

答案 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

如果您发现该规则有用并且想要保留它,则需要修改代码以使用importexport而不是名称空间。请参阅该规则的文档以了解哪些内容可以作为修复程序。

如果您喜欢该规则,但想禁用此行的规则,则在其上方添加以下内容:

// 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模块语法(导入/导出)

引用https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-namespace.md