接口的概念
在现实中,有很多接口,usb,手机上的。。。
在开发中,和后端联调的时候,也会调用接口. 所以接口在生活中出现的频率还是很高的
😃
在ts中的接口:是用于约束对象
, 类
,函数
的一种标准
👋
扩展类型
在ts中,除了基本类型,还有一些自己本身的扩展类型:TS也属扩展类型
🍖
- 类型别名
- 枚举
- 接口
- 类
接口约束对象
- 写法
interface User {
name: string;
age: number;
}
const use: User = {
name: '张三',
age: 18,
};
接口约束函数
- 写法
// 在对象中书写
interface User {
name: string;
age: number;
// 写法一
sayHello: () => void;
// 写法二
sayHello(): void;
}
// 直接定义
interface age { //此时的{}代表定界符
(n: string): boolean
}
const use: age = () => {
return true
}
use("123") // 如果传递非string参数,会报错
接口的有意思的点-继承🦋
接口的特殊之处在于, 它可以继承
, 实现多接口的组合, 子接口不能覆盖父接口的成员
继承单个
interface A {
T1: number
}
interface B {
T2: string
}
interface C extends A {
T3: boolean
}
let user: C = {
} // 此时提示
let user: C
类型“{}”缺少类型“C”中的以下属性: T3, T1
继承多个
interface A {
T1: number
}
interface B {
T2: string
}
interface C extends A,B {
T3: boolean
}
let user: C = {
} // 此时提示
let user: C
类型“{}”缺少类型“C”中的以下属性: T3, T1, T2
重写继承父接口的成员-会提示错误
🎅
interface C extends A,B {
T3: boolean,
T1: boolean
} // 此时提示错误
interface C
接口“C”错误扩展接口“A”。
属性“T1”的类型不兼容。
不能将类型“boolean”分配给类型“number”
和类型别名的区别
使用类型别名可以实现类似
的组合效果, 需要使用&符, 它叫做交叉类型
, 但是区别于接口的一点是:交叉类型会把相同的类型进行交叉😯
写法
type A = {
T1: number;
};
type B = {
T2: string;
};
type C = {
T3: boolean;
} & A & B; //使用&,实现类似的继承
let use: C = {
T3: true
} // 提示缺少T1和T2
交叉相同类型
type C = {
T3: boolean;
T1: string
} & A & B;
let use: C = {
T3: true,
T2: '123',
T1: null
} // 不能将类型“null”分配给类型“never”
交叉并重写了T1成员
, 发现在赋值的时候变成了never类型
,导致无法进行赋值
了, 这是棘手的问题需要避免!🙁
编译结果
和类型别名一样,interface定义的内容不会出现在编译结果中
建议
会发现和类型别名(type)定义的形式很像, 并且大部分的第三方库都使用interface,所以优先建议使用interface🤨
掘金:https://juejin.cn/post/7154671107948150815