为了账号安全,请及时绑定邮箱和手机立即绑定

ES2015 模块语法优于自定义 TypeScript 模块和命名空间

ES2015 模块语法优于自定义 TypeScript 模块和命名空间

小怪兽爱吃肉 2021-11-12 10:41:54
我在运行 npm start 时收到以下错误:ES2015 模块语法优于自定义 TypeScript 模块和命名空间 @typescript-eslint/no-namespace    namespace InternalThings {...}我试图研究这个,但它非常令人困惑。为什么会发生这种情况?如何解决?我试图在我的 tsconfig.json 上放置一些标志,但到目前为止没有成功;
查看完整描述

3 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

这是一个 lint 错误,由这个 lint 规则引起:https : //github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/no-namespace.md


如果您发现该规则有用并希望保留它,那么您需要修改代码以使用importandexport而不是命名空间。请参阅规则的文档以了解什么是修复。


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


// eslint-disable-next-line @typescript-eslint/no-namespace

如果您不喜欢该规则并希望完全禁用它,请编辑您的 .eslintrc 文件以包含以下行:


rules: {

  "@typescript-eslint/no-namespace": "off"

}


查看完整回答
反对 回复 2021-11-12
?
白板的微信

TA贡献1883条经验 获得超3个赞

要修复此错误,而不是:


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();


查看完整回答
反对 回复 2021-11-12
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

错误来自 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


查看完整回答
反对 回复 2021-11-12
  • 3 回答
  • 0 关注
  • 876 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信