接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。
一、初识
interface Item { // 定义一个item接口
id: number,
title: string
}
function renderList(item: Item) {
console.log(item.id, item.title); // 1 hello
}
renderList({id: 1, title: 'hello'});
PS:为什么以函数为第一个示例呢?主要是接口在日常的使用大多用来做函数参数使用
二、接口数据类型演示
enum Type {
Yes = 1,
No = 0
}
interface Item {
id: number, // 数字
title: string, // 字符串
status: boolean, // 布尔值
gender: Object, // 对象
girlfriend: null, // null
future: undefined, // undefined
favorites: string[], // 字符串数组
plan: [string, number], // 元组
type: Type, // 枚举
callback: ()=>string, // 返回字符串的回调函数
// callback(): string, // 函数的另一种写法
content: any // 任意
}
function renderList(item: Item): void {
console.log(item, item.callback());
}
renderList({
id: 1,
title: 'hello',
status: true,
gender: {1: '男', 0: '女'},
girlfriend: null,
future: undefined,
favorites: ['game', 'movie'],
plan: ['得分', 100],
type: Type.Yes,
callback: () => {
return '123123';
},
content: '这是一个内容'
});
三、是否可选
默认属性都是必须的,如果要改成可选的加个?就行了
interface Item {
id: number
title?: string,
}
function renderList(item: Item): void {
console.log(item);
}
renderList({
id: 1
});
四、只读属性
在属性前添加readonly
修饰符即可表明只读
interface Item {
id: number,
readonly title: string
}
let item: Item = {id: 1, title: 'hello'}
item.title = 'world' // 报错
五、接口继承
使用关键字extends
来实现接口继承
interface Shape {
color: string;
}
interface Square extends Shape {
size: number;
}
let square = <Square>{};
square.color = "blue";
square.size = 4;
// 或
// let square: Square = {
// color: "green",
// size: 2
// }
console.log(square);
六、接口实现
使用关键字implements
来实现接口继承
interface ClockInterface {
currentTime: Date;
}
class Clock implements ClockInterface {
currentTime: Date = new Date();
constructor(h: number, m: number) {
console.log(h, m, this.currentTime);
}
}
let clock = new Clock(8, 10);
七、多种属性类型
如果想要一个属性有几个类型,可以加个|
间隔
interface Shape {
type: number|string;
}
let shape = <Shape>{};
// shape.type = 1;
shape.type = '1';
console.log(shape.type)
八、可索引
主要用来针对数组接口实现
interface StringArray {
[index: number]: string;
}
let myArray: StringArray;
myArray = ["Foo", "Bar"];
let myStr: string = myArray[0];
console.log(myStr)
九、混合类型
现实生产可能需要一个对象可以同时做为函数和对象使用,并带有额外的属性,这时就可以使用混合类型
interface Counter {
(start: number): string;
interval: number;
reset(): void;
}
function getCounter(): Counter {
let counter = <Counter>function (start: number) {
return `开始时间为:${start}`;
};
counter.interval = 123;
counter.reset = function () { };
return counter;
}
let c = getCounter();
console.log(c(10)); // 开始时间为:10
c.reset();
c.interval = 5.0;
参考链接:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。