1.接口
1.1 基本使用
// 接口用来定义一个类结构,用来定义一个类中应该包含哪些属性和方法
// 接口名可以重复(可以声明合并)
interface yourType {
name: string
age: number
}
interface yourType {
gender: string
}
const you: yourType = {
name: 'yoyo',
age: 333,
gender: '女' // 这里的属性要和接口中一致,不能少,不能多
}
- interface 只能表示像对象那种结构的类型
1.2 行为的抽象
实现(implements)是面向对象中的一个重要概念。
一般来讲,一个类只能继承自另一个类,有时候不同类之间可以有一些共有的特性,这时候就可以把特性提取成接口(interface),用 implements 关键字来实现。这个特性大大提高了面向对象的灵活性。
- 接口就是把一些类中共有的属性和方法抽象出来,可以用来约束实现此接口的类
- 一个类可以实现多个接口,一个接口也可以被多个类实现,但一个类的可以有多个子类,但只能有一个父类
// 一个类可以实现多个接口
interface Test {
name: string
}
interface Test1 {
age: number
}
class TestData implements Test, Test1 {
name: string
age: number
constructor(name: string, age: number) {
this.name = name,
this.age =age
}
}
const useTestData = new TestData('zs', 12)
2.类型
2.1 基本使用
// 描述一个对象的类型
// 类型别名:名称唯一,不能重复
type myType = {
name: string
age: number
}
const obj: myType = {
name: 'ccc',
age: 33 // 这里的属性要和类型声明中一致,不能少,不能多
}
- ts除对象类型,可以声明(
undefined,null,boolean,string,number)类型
3. 两者区别
3.1 命名规范
- type类型别名 命名唯一,不可重复
- interface接口 可以重复定义
// 类型声明,名称唯一,不可重复
type typeA = {
name: string,
age: number
}
const aa: typeA = {
// 这里的属性要和类型声明中一致,不能少,不能多
name: 'zs',
age: 18
}
interface something {
name: string,
age: number
}
interface something {
level: number
}
const objs: something = {
name: 'zs',
age: 18,
level: 3
}
3.2 type可以使用in 关键字生成映射类型 interface不行
type Keys = "firstname" | "surname"
type DudeType = {
[key in Keys]: string
}
const test: DudeType = {
firstname: "Pawel",
surname: "Grzybek"
}
3.2 interface 与 type 可以相互扩展对方 单语法不通 (extends关键字 &操作符)
type PartialPointX = { x: number; };
interface Point extends PartialPointX { y: number; } // 利用type扩展interface
const obj: Point = {
x: 22,
y: 33
}
interface PartialPointX { x: number; }
type Point = PartialPointX & { y: number; }; // 利用interface扩展 type
const obj: Point = {
x: 22,
y: 33
}
console.log(obj)
// 输出:
// { "x": 22, "y": 33 }
建议: 公共的用 interface 实现,不能用 interface 实现的再用 type 实现
用interface描述数据结构,用type描述类型关系