interface接口
使用场景
- 如果能用interface去表示类型,尽量使用interface去表示。
如下的例子:
const setPersonName = (person: Person, name: string): void => {
person.name = name;
};
const person1 = {
name: "yyc",
sex: "male",
};
setPersonName(person1, "yyyc");
getPersonName(person1);
由于传入的类型是一个特定类型,可以使用interface去对其进行定义。
接口的一些属性
- ? 这个属性可有可无
- readOnly 只读
- 其他属性也可以有
- 定义方法 say():string
interface Person {
name: string;
age?: number; //表示可有可无
readonly school?: string;
[propName:string]:any//
say():string
}
接口的强制校验
给person1添加一个interface没有声明的类型'male',如果用变量的形式传递,不会报错。
const person1 = {
name: "yyc",
sex: "male",
};
setPersonName(person1, "yyyc");
getPersonName(person1);
但如果以字面量的形式传递会报错:
image.png
原因是ts会对字面量的形式进行强校验。
使用类去应用一个接口
- 使用类去应用一个接口,类必须去具备接口定义的这些属性
class Student implements Person {
name = "yyyyc";
school = "liixn";
}
使用接口去继承一个类
可以用extends继承,让接口也可以自己去添加属性
interface Teacher extends Person {
getSalary(): void;
}
const getTeacher = (teacher: Teacher): void => {
teacher.getSalary();
};
const teacherA = {
name: "aaa",
getSalary() {
console.log("cannot tell u");
},
};
getTeacher(teacherA);
用接口去可以定义函数
interface SayHi{
(word:string):string
}
const say:SayHi = () => {}
经过编译后的interface
interface只是ts中语法校验的工具,在编译成js后,interface就会全部消失。