frontend-interview icon indicating copy to clipboard operation
frontend-interview copied to clipboard

TS中接口是什么与类型的关系是什么

Open su37josephxia opened this issue 2 years ago • 9 comments

su37josephxia avatar Mar 07 '22 00:03 su37josephxia

ts中的接口和类型分别是指用interface和type来定义参数的类型 interface可以用来描述对象参数的类型,包括一般对象和函数对象参数,基本上用interface描述的类型用type都可以实现,两者区别在于: 1、用type声明类型不能使用extends关键字来继承,但可以用&来实现; 2、interface声明参数的类型可以覆盖,而type声明的类型不能再次声明具有唯一性; 3、用interface一般用来声明组件内部属性、组件之间的传递的接口参数,而type用于简单参数类型的语义化更优雅一些; 4、type比interface更适用于联合类型和枚举类型。

guoshukun1994 avatar Mar 10 '22 14:03 guoshukun1994

TS中接口是什么与类型的关系是什么

接口

在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement)。

TypeScript 中的接口是一个非常灵活的概念,除了可用于[对类的一部分行为进行抽象](https://ts.xcatliu.com/advanced/class-and-interfaces.html#类实现接口)以外,也常用于对「对象的形状(Shape)」进行描述。

接口一般首字母大写。有的编程语言中会建议接口的名称加上 I 前缀

赋值的时候,变量的形状必须和接口的形状保持一致

如果希望不要完全匹配一个形状,那么可以用可选属性

  • 类(Class):定义了一件事物的抽象特点,包含它的属性和方法
  • 接口(Interfaces):不同类之间公有的属性或方法,可以抽象成一个接口。接口可以被类实现(implements)。一个类只能继承自另一个类,但是可以实现多个接口

类与接口

接口可以对类的一部分行为进行抽象

  • 类实现接口

    • 一个类只能继承自另一个类,有时候不同类之间可以有一些共有的特性,这时候就可以把特性提取成接口(interfaces),用 implements 关键字来实现

    • 一个类可以实现多个接口

  • 接口继承接口

    • 接口与接口之间可以是继承关系
  • 接口继承类

    • 常见的面向对象语言中,接口是不能继承类的,但是在 TypeScript 中却是可以的。因为我们创建一个类的时候,除了会创建一个类之外,同时也创建了一个与类同名的类型,可以当做一个类型来用
    • 在接口继承类的时候,也只会继承它的实例属性和实例方法

frllk avatar Mar 10 '22 14:03 frllk

接口

接口是一系列抽象方法的声明,是一些方法特征的集合

TypeScript 的核心原则之一是对值所具有的结构进行类型检查,并且只要两个对象的结构一致,属性和方法的类型一致,则它们的类型就是一致的。 在TypeScript里,接口的作用就是为这些类型命名和为代码或第三方代码定义契约。

7TingYu avatar Mar 10 '22 14:03 7TingYu

TS中接口是什么?与类型的关系是什么?

接口(interface)

通俗来说,接口就是用来描述复杂数据结构的一种类型

语法:

interface Person {
    firstName: string;
    lastName: string
}
function name(person:Person) {
    console.log(person.firstName, person.lastName)
}

这里的 Person 就是一个接口,也就是一种自定义的类型

接口还能定义函数类型:

interface AddFunc {
  (num1: number, num2: number): number;
}

const add: AddFunc = (n1, n2) => n1 + n2;
const join: AddFunc = (n1, n2) => `${n1} ${n2}`; // 不能将类型'string'分配给类型'number'
add("a", 2); // 类型'string'的参数不能赋给类型'number'的参数

使用接口定义一个类的成员:

interface ClockInterface {
  currentTime: Date;
  setTime(d: Date): void;
}

class Clock implements ClockInterface {
  currentTime: Date = new Date();
  setTime(d: Date) {
    this.currentTime = d;
  }
  constructor(h: number, m: number) {}
}

interface 和 type 的区别

  • 用type声明类型不能使用extends关键字来继承,但可以用&来实现
  • interface声明参数的类型可以覆盖,而type声明过的类型不能再次声明
  • interface一般用来声明组件内部属性、组件之间的传递的接口参数,而type用于简单参数类型的语义化
  • type比interface更适用于联合类型和枚举类型

RJM1996 avatar Mar 10 '22 15:03 RJM1996

接口用于对值的结构和类型的检查,常用于函数入参对象的属性的定义。 我们可以利用接口提前定义好一个数据结构,并定义好它内部的元素的类型。

使用方法如下:

interface formData {
  username: string;
  password: string;
}

function validate(data: formData) {
  console.log(data.username);
}

crazyyoung1020 avatar Mar 10 '22 15:03 crazyyoung1020

接口

接口是一种定义行为和规范,在程序设计中接口起到限制和规范的作用。接口定义某一批类所需要遵循的规范,接口不关心这些类的内部实现,只规定这些类必须提供某些方法

类型别名(type aliases)与 接口(interfaces)非常相似, 绝大部分情况下你可以自由的选择使用哪种方式。类型别名(type aliases)拥有接口(interfaces)的绝大多数特征,关键的区别在于接口始终是可扩展的,而类型别名不能重新打开以添加新属性。 由于接口通过开放扩展(符合开闭原则)更紧密的映射了 JavaScript 对象的工作方式,因此建议尽可能使用接口而非类型别名。 另一方面,如果你无法通过接口来描述某些形状,或者你需要使用一个联合类型或元组类型,通常可以使用类型别名来达成目的。

rachern avatar Mar 10 '22 16:03 rachern

TS中接口是以关键字 interface 定义的一种数据结构,他可以对某一种对象设定指定的key进行约束,抽象地表达这个对象的字段结构。 在对象中,通常情况下当接口被定义的时候那么和这个接口同名的对象就必须设置完全一致数量和内容的字段。当接口定义的字段名冒号前面加上问号,那么这个字段就可选。也可以通过 [propName: string]:any 表示更多自定义的字段和value。定义接口的时候也可以使用 readonly关键字,表示这个对象在初始化的时候必须设置这个字段,并且不可修改。 接口也可以在函数中用来约入参。在类中和 java中类的接口相似,类中定义的方法,通过 implements 实现类,去实现接口中定义的所有方法。

oujinlong avatar Mar 10 '22 19:03 oujinlong

  • 接口(Interfaces)是一系列抽象方法的声明,是一些方法特征的集合
  • 类描述了所创建的对象共同的属性和方法
  • 类和接口的区别:接口中只声明成员方法,不做实现;类声明并实现方法。
  • 接口和接口之间叫继承(extends),类和接口之间叫实现
  • 类的类型可以通过接口来实现。
  • 类可以实现1个或多个接口,接口可以继承其他的多个接口

chunhuigao avatar Mar 10 '22 23:03 chunhuigao

接口是一系列抽象属性和方法的声明,用来指定它们的类型,对属性和方法的类型和返回值进行约束。 接口和类型都是在TS中帮助我们进行类型定义和类型检查的; 接口通过关键字 interface 定义,类型使用关键字 type 定义; 接口可以进行继承和混合,但是类型不行; 类型可以用来定义联合类型和交叉类型,但是接口不行; 接口可以被重复定义,它的属性会叠加,这个特性可以让我们很方便的对全局变量,第三方库的类型进行扩展;

zhenyuWang avatar Mar 11 '22 01:03 zhenyuWang