TypeScript中的这些语句(接口
与类型
)之间有什么区别?
interface X {
a: number
b: string
}
type X = {
a: number
b: string
};
截至TypeScript 3.2(2018年11月),以下情况属实:
2021年3月更新:较新的打字稿手册有一节界面与别名,解释了差异。
原创答案(2016)
根据(现已存档)TypeScript语言规范:
与总是引入命名对象类型的接口声明不同,类型别名声明可以为任何类型引入名称,包括基元、联合和交集类型。
规范还提到:
接口类型与对象类型文字的类型别名有许多相似之处,但由于接口类型提供了更多功能,它们通常比类型别名更受欢迎。例如,接口类型
interface Point {
x: number;
y: number;
}
可以写成类型别名
type Point = {
x: number;
y: number;
};
但是,这样做意味着失去以下功能:
目前的答案和官方文件已经过时。对于那些刚接触TypeScript的人来说,如果没有例子,所使用的术语就不清楚了。以下是最新的差异列表。
两者都可以用来描述对象的形状或函数签名。但是语法不同。
界面
interface Point {
x: number;
y: number;
}
interface SetPoint {
(x: number, y: number): void;
}
类型别名
type Point = {
x: number;
y: number;
};
type SetPoint = (x: number, y: number) => void;
与接口不同,类型别名也可以用于其他类型,如原语、联合和元组。
// primitive
type Name = string;
// object
type PartialPointX = { x: number; };
type PartialPointY = { y: number; };
// union
type PartialPoint = PartialPointX | PartialPointY;
// tuple
type Data = [number, string];
两者都可以扩展,但同样,语法不同。另外,请注意,接口和类型别名不是互斥的。接口可以扩展类型别名,反之亦然。
接口扩展接口
interface PartialPointX { x: number; }
interface Point extends PartialPointX { y: number; }
类型别名扩展类型别名
type PartialPointX = { x: number; };
type Point = PartialPointX & { y: number; };
接口扩展了类型别名
type PartialPointX = { x: number; };
interface Point extends PartialPointX { y: number; }
类型别名扩展接口
interface PartialPointX { x: number; }
type Point = PartialPointX & { y: number; };
类可以以完全相同的方式实现接口或类型别名。但是请注意,类和接口被视为静态蓝图。因此,它们无法实现/扩展命名联合类型的类型别名。
interface Point {
x: number;
y: number;
}
class SomePoint implements Point {
x = 1;
y = 2;
}
type Point2 = {
x: number;
y: number;
};
class SomePoint2 implements Point2 {
x = 1;
y = 2;
}
type PartialPoint = { x: number; } | { y: number; };
// FIXME: can not implement a union type
class SomePartialPoint implements PartialPoint {
x = 1;
y = 2;
}
与类型别名不同,接口可以多次定义,并将被视为单个接口(合并所有声明的成员)。
// These two declarations become:
// interface Point { x: number; y: number; }
interface Point { x: number; }
interface Point { y: number; }
const point: Point = { x: 1, y: 2 };
这些语句(接口vs类型)有什么区别?
我最近遇到了这个问题,我不确定是使用接口还是类来定义特定的类型。 注意:这个问题不是问和之间的区别。 例如,给定这个类和接口 我将使用类或接口作为函数参数中的类型。 在我看来,两者都可以,但我更喜欢使用类来避免同步接口上的所有方法/属性。我认为接口只是一个类必须遵守的模板/契约。 但是,在我的例子中,大多数情况下,该类通常会添加更多不在接口定义中的方法/属性。 下面这个类就是一个很好的例子。 在这
本文向大家介绍TypeScript 类接口,包括了TypeScript 类接口的使用技巧和注意事项,需要的朋友参考一下 示例 public在接口中声明变量和方法,以定义其他打字稿代码如何与之交互。 在这里,我们创建一个实现接口的类。 该示例说明如何创建一个接口ISampleClassInterface和一类SampleClass是implements接口。
我需要为对后端服务器的HTTP请求创建某种类型(使用Angular 2),例如:}, 我应该用什么来构建这些模型?谢谢!
我见过类似这样的相关问题,但它们都假设类和接口的区别在于类可以实例化,而接口不能。然而,以@types/google.maps为例,例如: 接口和类: 延伸其他对象 具有属性 具有方法/功能 无法从这些定义直接实例化 在google maps代码中的某个地方,实际上有一个类用于这里定义的< code >类和这里定义的< code >接口。看起来类定义是用户可以实例化的,而不是库可以内部实例化的(接
问题内容: 这两个内部类声明之间有什么区别?还评论优点/缺点吗? 案例A:班级内的班级。 案例B:接口内的类。 进行了更正:放置getvalue方法。 进一步的信息:我能够在没有实现AT AT ALL接口的另一个类中实例化A和B的Items类。 由于未实例化接口,因此不通过实例化LEVELS接口就可以通过点表示法来访问接口内的所有元素,这仅仅是因为您无法实例化接口- 有效地使接口内定义的类可渗透静