为什么 "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 之间是通用的。我知道interface
比type
强大,但是当我不需要interface
的优势,而type
已经足够的时候,我为什么不用呢?使用 type
还有其他缺点吗?
似乎在 Typescript 中使用 type
没有问题,并且该规则有点自以为是,正如@CertainPerformance 上面评论的那样。我发现该规则已被弃用,并且 removed 来自版本 2.2.0
。
我使用 @typescript-eslint/eslint-plugin
和 @typescript-eslint/parser
。我将它们都升级到版本 2.2.0
并消除了 linter 错误。
Type
和 Interface
之间的区别仅在于可扩展性(不完全是唯一的区别,而是文档中提到的主要区别)。我看不出有什么理由再保留 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.
我有一个 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 之间是通用的。我知道interface
比type
强大,但是当我不需要interface
的优势,而type
已经足够的时候,我为什么不用呢?使用 type
还有其他缺点吗?
似乎在 Typescript 中使用 type
没有问题,并且该规则有点自以为是,正如@CertainPerformance 上面评论的那样。我发现该规则已被弃用,并且 removed 来自版本 2.2.0
。
我使用 @typescript-eslint/eslint-plugin
和 @typescript-eslint/parser
。我将它们都升级到版本 2.2.0
并消除了 linter 错误。
Type
和 Interface
之间的区别仅在于可扩展性(不完全是唯一的区别,而是文档中提到的主要区别)。我看不出有什么理由再保留 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.