tslint:禁止使用命名空间和模块。

12

我最近得到了一个旧的.ts文件,想要进行更新。

其中两个警告信息是:

'namespace'和'module'是不允许的

以及

内部 'module' 语法已被弃用,请改用 'namespace' 关键字。

我读到关于使用标准化的ES6风格外部模块的方法,但我无法弄清楚如何实现。

我的代码看起来像下面这样:

export namespace MySpace
{
  export module MyModule
  {
    export interface MyInterface
    {
    }

    export class MyClass
    {
    }
    ...
  }
}

有没有人能给我一些提示,如何将这个结构更新为实际的样式规则?

非常感谢大家提前的帮助!

最好的问候

mrt


https://palantir.github.io/tslint/rules/no-namespace/ - m.akbari
谢谢,我已经找到了这个网站,但是我不知道如何解释它。我对js/ts都很新,对此感到抱歉。 - mrt
1个回答

9

内部“module”语法已弃用,请改用“namespace”关键字。

这个linter的警告是关于export module MyModule的,因为MyModule不是一个模块,而是一个命名空间。应该使用的关键字是namespaceexport namespace MyModule

'namespace'和'module'被禁止使用

这个linter的警告是关于export namespace MySpace的。顶级的export暗示了该文件是一个模块,同时使用命名空间和模块是不好的做法

有没有人能给我一些提示,如何将这个结构更新到实际的样式规则?

完全不要使用namespace。以下是您的代码转换为一个模块:

export interface MyInterface
{
}

export class MyClass
{
}

// …

参见: Mozilla的模块介绍

2
命名空间是必需的,以将“静态”成员添加到接口中。是否有其他语法可用,或者我只需要禁用此tslint规则? - Andrew Arnott
@AndrewArnott 我不确定什么是“静态”成员。也许它与类有关?也许一个简单的声明类就足够了? - Paleo
1
哦,有趣。是的,我似乎可以在同一个模块中同时定义静态方法(以及其他方法?)并将其显示在 A.SomeMethod 上,而 A 仍然被 TypeScript 编译器视为接口类型。还需要进行更多测试,但这是很有希望的。 - Andrew Arnott
@Paleo 为什么建议不使用命名空间?只是好奇。 - Deian
@Deian 因为_TypeScript是带有类型语法的JavaScript_...除了namespaceenum之外,它们在JS中不存在,也不是类型。在我看来,这两个特性应该被避免。优先选择JS模块而不是命名空间,并使用联合类型代替枚举。 - Paleo
@Paleo 枚举是关键的基础设施管理...但感谢您的观点! - Deian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接