1.定义接口
interface Person{
name: string,
age:number,
};
let p1: Person = {
name: "hwm",
age: 18,
};
console.log(p1); // {name: 'hwm', age: 18}
2.接口中的属性
- 可选属性(在属性后加 ? )
- 只读属性(在属性前加 readonly)
interface Person{
name?: string,
readyonly age:number,
};
3.任意属性
- 允许实现了接口的对象自定义任意属性
- 任意属性的索引值可以是 number 或 string 类型
- 一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集
接口:
interface IPerson{
name: string,
age: number,
like: string[],
[propname: string]: any, // [propname: string]: string| number| string[]| Function,
// [propname: string]: string 错误,没有包括索引属性
};
实现接口:
let p1: IPerson = {
name: "hwm",
age: 18,
like: ["m", "i", "n", "g"],
score: 99, // 任意属性
fatherName: "hai", // 任意属性
};
4.接口中使用函数
接口:
interface IPerson{
voidFun: () => void, // 无参,无返回值
returnFun: () => string, // 无参,有返回值
paramFun: (p: string) => string, // 有参,有返回值
};
实现接口:
let p1: IPerson = {
voidFun(): void{
console.log("voidFun");
},
returnFun(): string{
return "returnFun";
},
paramFun(str: string): string{
return str;
},
};
p1.voidFun(); // voidFun
console.log(p1.returnFun()); // returnFun
console.log(p1.paramFun("paramFun")); // paramFun
5.接口继承
- extends 关键字
- 接口允许继承多个接口
// 单继承
Child_interface_name extends super_interface_name
// 多继承
Child_interface_name extends super_interface1_name, super_interface2_name,…,super_interfaceN_name
6.类实现接口
implement 关键字
interface Animal{
name: string,
}
class Dog implements Animal{
name: string;
constructor(name: string){
this.name = name;
}
public cry(): void{
console.log(this.name + " 汪汪汪")
}
}
7.完整代码
interface IPerson1{
name: string,
}
interface IPerson2{
age: number,
}
interface IPerson extends IPerson1, IPerson2{
like: string[], // 数组属性
voidFun: () => void, // 无参,无返回值函数
returnFun: () => string, // 无参,有返回值函数
paramFun: (p: string) => string, // 有参,有返回值函数
[propname: string]: any, // 任意属性
};
let p1: IPerson = {
name: "hwm",
age: 18,
like: ["m", "i", "n", "g"],
voidFun(): void{
console.log("voidFun");
},
returnFun(): string{
return "returnFun";
},
paramFun(str: string): string{
return str;
},
score: 99,
fatherName: "hai",
};
console.log(p1);
p1.voidFun(); // voidFun
console.log(p1.returnFun()); // returnFun
console.log(p1.paramFun("paramFun")); // paramFun