type 和 interface 都可以定义对象,二者到底有何区别?
interface Person { age: number name: string}type Person = { age: number name: string};
以下是AI的回答
interface:
interface Person { name: string; age: number;}const person: Person = { name: "Alice", age: 30};
type:
type
则更像是取了个别名。type Point = { x: number; y: number;};const point: Point = { x: 10, y: 20};
interface
。type
。Typescript 中的 interface 和 type 到底有什么区别
type
可以声明基本类型type Count = number;type Color = "Red" | "Blue";
interface
只能用来声明复杂类型(对象和函数)interface
时,TS 将检查扩展的接口是否可以赋值给被扩展的接口。interface A { good(x: number): string; bad(x: number): string;}interface B extends A { good(x: string | number): string; bad(x: number): number; // Interface 'B' incorrectly extends interface 'A'. // Types of property 'bad' are incompatible. // Type '(x: number) => number' is not assignable to type '(x: number) => string'. // Type 'number' is not assignable to type 'string'.}
交叉类型
时则不会出现这种情况。我们将上述代码中的接口改写成类型别名,把 extends
换成交集运算符 &
,TS 将尽其所能把扩展和被扩展的类型组合在一起,而不会抛出编译时错误。type A = { good(x: number): string; bad(x: number): string;};type B = A & { good(x: string | number): string; bad(x: number): number;};// ok
interface
多次的声明会合并。type
不能重复声明。
interface
可以定义多次,多次的声明会合并。interface Point { x: number;}interface Point { y: number;}const point: Point = { x: 1 }; //error Property 'y' is missing in type '{ x: number; }' but required in type 'Point'.const point: Point = { x: 1, y: 1 }; // ok
type
如果定义多次,会报错。type Point = { x: number; //error Duplicate identifier 'A'.};type Point = { y: number; //error Duplicate identifier 'A'.};
在 TypeScript 中,interface
和 type
都可以用来定义对象的形状(shape),但它们之间确实有一些关键的区别。
* `interface` 可以被声明合并,这意味着你可以在不同的地方声明同一个 `interface`,并且这些声明会被合并成一个。* `type` 则不能声明合并。
* `interface` 支持继承,这意味着一个 `interface` 可以继承另一个 `interface` 的成员。* `type` 不支持继承。
* `type` 可以是任何有效的 TypeScript 类型,包括基本类型、联合类型、交叉类型、元组等。这使得 `type` 更加灵活,可以用来创建复杂的类型结构。* `interface` 不能用作类型别名。
* `type` 可以被初始化为一个具体的值或对象,而 `interface` 不能。
* 使用 `type` 可以更清晰地表示函数类型,特别是当函数参数或返回值是复杂类型时。* `interface` 在表示函数类型方面相对较弱。
对于你给出的例子,Person
接口和 Person
类型定义在功能上是等价的,它们都定义了一个对象,该对象具有 age
(数字类型)和 name
(字符串类型)两个属性。但是,如果你需要更复杂的类型定义或需要利用上述 type
和 interface
之间的区别,那么你可能会选择其中之一。
总的来说,选择使用 interface
还是 type
取决于你的具体需求和偏好。在 TypeScript 的早期版本中,interface
是主要的类型定义方式,但随着 type
的引入和功能的增强,type
也变得越来越流行。
本文向大家介绍interface 和 type 到底有什么区别?相关面试题,主要包含被问及interface 和 type 到底有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 interface 和 type 到底有什么区别? 作者:rottenpen
问题内容: 自从90年代末在大学期间使用JBuilder以来,我从未接触过Java,所以我有点脱节-无论如何我本周一直在从事一个小型Java项目,并使用Intellij IDEA作为我的IDE ,以便与我的常规.Net开发有所不同。 我注意到它支持添加接口和@interface,什么是@interface,它与普通接口有何不同? 与 我已经做了一些搜索,但找不到大量有用的有关@interface的
我认为在这个问题上,这是一种不同的倾向。也许这个问题更好的措辞,你什么时候会使用公共,而不是出口?从我所读到的内容来看,似乎任何C#/Java人员认为公开的地方,您实际上想要的都是导出。 您将在何时/何地使用public而不是export?
在TypeScript中,当创建.d.ts源代码声明文件时,哪个更可取,为什么? 或 我能说出的区别是接口不能有静态方法,所以你必须为此使用一个类。两者都不产生任何JS输出,所以也许没关系?
我发现他们有同样的限制。 正如我所发现的,这两者之间没有明显的区别,因为它们都实施了相同的限制。我唯一注意到的是继承和实现。 类只能扩展到单个基类 一个类可以实现多个接口。