Typescript学习笔记(6) ----- 尽量用interface去代表一个类型

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就会全部消失。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。