本文介绍了TypeScript:接口与类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这些语句(接口与类型)有什么区别?

What is the difference between these statements (interface vs type)?

interface X {
    a: number
    b: string
}

type X = {
    a: number
    b: string
};

推荐答案

2021 年 3 月更新:较新的 TypeScript 手册有一个部分 接口与类型别名,解释了这些差异.

Update March 2021: The newer TypeScript Handbook has a section Interfaces vs. Type Aliases which explains the differences.

原始答案 (2016)

根据 (现已存档)TypeScript 语言规范:

与总是引入命名对象类型的接口声明不同,类型别名声明可以为任何类型的类型引入名称,包括原始类型、联合类型和交集类型.

规范继续提到:

接口类型与对象类型的类型别名有很多相似之处文字,但由于接口类型提供了更多的功能,它们是通常首选键入别名.例如接口类型

interface Point {
    x: number;
    y: number;
}

可以写成类型别名

type Point = {
    x: number;
    y: number;
};

然而,这样做意味着失去以下功能:

However, doing so means the following capabilities are lost:

  • 自 TS 2.7 起不再适用.
  • 一个接口可以有多个合并声明,但是一个类型别名对于对象类型文字不能.
  • No longer true since TS 2.7.
  • An interface can have multiple merged declarations, but a type alias for an object type literal cannot.

这篇关于TypeScript:接口与类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-16 04:03