为什么TypeScript程序员更喜欢界面而不是类型

为什么TypeScript程序员更喜欢界面而不是类型,typescript,Typescript,我看到很多TypeScript开发人员过度使用界面。事实上,即使他们的代码比面向对象的更具功能性,他们也几乎在所有事情上都使用它。就我个人而言,我更喜欢type,它更灵活,并且不会混淆接口是由任何类实现的还是仅用于定义对象类型。 使用接口比类型有什么优势吗?或者它是开发人员习惯于做的某种遗留事情吗?接口是实体应该是什么的表示;特别是物体 接口不仅存在于Typescript,而且在爪哇,C++…语法不同但意思相同 海事组织: 接口是描述对象/类应该是什么时应该使用的接口。 类型在其他人手中应被视为

我看到很多TypeScript开发人员过度使用界面。事实上,即使他们的代码比面向对象的更具功能性,他们也几乎在所有事情上都使用它。就我个人而言,我更喜欢
type
,它更灵活,并且不会混淆接口是由任何类实现的还是仅用于定义对象类型。
使用
接口
类型
有什么优势吗?或者它是开发人员习惯于做的某种遗留事情吗?

接口是实体应该是什么的表示;特别是物体

接口不仅存在于Typescript,而且在爪哇,C++…语法不同但意思相同

海事组织:

接口
是描述对象/类应该是什么时应该使用的接口。


类型
在其他人手中应被视为别名制造者。

类型的预期用途是,尤其是交叉口/联合类型

它们不应像接口一样使用,如文档所述:

正如我们所提到的,类型别名的作用有点像接口;然而,有一些微妙的区别

一个不同之处是接口创建了一个新名称,该名称在任何地方都可以使用。类型别名不会创建新名称-例如,错误消息不会使用别名。在下面的代码中,将鼠标悬停在编辑器中的
interfaced
上,将显示它返回
接口
,但将显示
别名
返回对象文字类型

type Alias = { num: number }
interface Interface {
    num: number;
}
declare function aliased(arg: Alias): Alias;
declare function interfaced(arg: Interface): Interface;

“即使他们的代码比面向对象的代码更具功能性”
接口
本身并不是这两者中的任何一个。“[
type
]不会混淆接口是否由任何类实现”让我明确这是您的期望。不是每个类型脚本程序员的期望。对我来说,接口并没有以任何方式绑定到类。类型系统和类系统是不同的东西。函数式程序员应该理解这一点,因为Haskell和其他人一样,有一个类型系统<代码>接口定义了一个结构预期,而不是继承链。更正
接口
不仅仅适用于对象。您可以有一个函数的接口。是的,“函数是对象”,除了函数接口和对象接口之外,其他所有的都是绝对不同的,不能互换,也不能在任何方向上互换。对于对象,接口描述形状(预期的属性和值),而对于函数,接口描述签名(预期的输入和输出)。你说得很对,我的句子
特别是对象
不够清楚。对于所考虑的函数,您更愿意使用
type
关键字,因为通常您会执行类似
type MyFunc=(foo:string)=>void:
,这就是为什么我说接口是专门为对象/类设计的。@VLAZ我不知道这种语法。有趣!它是使用
函数
关键字工作的,还是使用函数是对象这一事实的一种变通方法?它是
接口
的另一种语法。它与作为对象的函数没有任何关系——它只是一个重载实现。老实说,这有点烦人,但我想这是为了有一种规范的方法来实现函数接口和结构接口。它可能很简单,比如说
签名添加
。不幸的是,函数接口/签名不能用于注释函数声明。充其量,您可以使用箭头函数或
myFn:Add=function(){}