为什么 "type" 在打字稿中被弃用?

Why is "type" deprecated in typescript?

我有一个 type 声明如下:

type Position = {
    white: number[];
    black: number[];
}

当我检查项目时,我看到这个错误:

error  Use an interface instead of a type literal  @typescript-eslint/prefer-interface

有关导致错误的规则的文档说:

Interfaces are generally preferred over type literals because interfaces can be implemented, extended and merged.

这条规则在 TSLint 和 ESLint 之间是通用的。我知道interfacetype强大,但是当我不需要interface的优势,而type已经足够的时候,我为什么不用呢?使用 type 还有其他缺点吗?

似乎在 Typescript 中使用 type 没有问题,并且该规则有点自以为是,正如@CertainPerformance 上面评论的那样。我发现该规则已被弃用,并且 removed 来自版本 2.2.0

我使用 @typescript-eslint/eslint-plugin@typescript-eslint/parser。我将它们都升级到版本 2.2.0 并消除了 linter 错误。

TypeInterface 之间的区别仅在于可扩展性(不完全是唯一的区别,而是文档中提到的主要区别)。我看不出有什么理由再保留 Type,也许这就是它被弃用的原因。

Differences Between Type Aliases and Interfaces

Type aliases and interfaces are very similar, and in many cases, you can choose between them freely. Almost all features of an interface are available in type, the key distinction is that a type cannot be re-opened to add new properties vs an interface which is always extendable.

参考: https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#differences-between-type-aliases-and-interfaces