Skip to content

接口

在 TS 里面接口可以定义任意类型

基本用法

  • 关键字 interface
js
interface Person {
  name: string;
}
const PersonOne: Person = {
  name: "哈哈哈",
};

可选属性

  • 一般用?来表示可选属性,可有可无
js
interface Person2 {
  name: string;
  color?: string;
}

const Man: Person2 = {
  name: "哈哈",
};

绕开多余属性检查

有的时候我们不希望 Typescript 这么严格的对数据检查,我们需要绕开多余性检查

  • 使用?变成可选属性
js
interface Vegetables {
  color?: string;
  type: string;
}

const VegetablesResult: Vegetable = {
  type: "哈哈哈",
};
  • 使用索引签名
js
interface Vegetables {
  color: string;
  type: string;
  [prop: string]: any;
}

const food = {
  color: "red",
  type: "水果",
  price: 30,
};

只读属性

  • 接口设置为只读属性
js

interface Role{
  readonly name: string;
  readonly xingbie:  string;
}

const shili:Role = {
  name:'今天',
  xingbie:'男'
}

shili.name = '明天'  //报错误

函数类型

  • 接口类型还可以描述函数
js
interface AddFunc {
  (num1: number, num2: number): number;
}

const add2: AddFunc = (arg1: number, arg2: number) => {
  return arg1 + arg2;
};
  • 接口类型里面除了函数还可以有其他的类型
js
interface Func {
  (num1: number, num2: number): number;
}

interface typeAddson {
  id: number;
  type: string;
  add: Func;
}

const typeResult: typeAddson = {
  id: 1,
  type: "哈哈",
  add: (arg1, arg2) => {
    return arg1 + arg2;
  },
};

typeResult.addPosition(1, 2);

接口的高阶用法

  • 索引签名
js


interface RoleDic{
  readonly [id:number] :string;
}

const role:RoleDic = {
  0:"super_admin"
}

role[0] = 'Hello';  //error 类型报错误 因为readonly只读

接口继承

接口和接口的继承 extends

js
interface Person {
  name: string;
}

interface Man extends Person {
  xingbie: string;
}

const Man_People: Man = {
  name: "哈哈哈",
  xingbie: "男",
};

接口和类之间的继承

  • 接口继承类 extends
js
class Person {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  printname() {
    return this.name;
  }
}
interface Man extends Person {
  xingbie: string;
}

const Man_People: Man = {
  name: "哈哈哈",
  xingbie: "男",
  printname: () => {
    return Man_People.name;
  },
};

console.log(Man_People.printname());

类继承接口

js
interface Man {
  xingbie: number;
}

class Person implements Man {
  name: string;
  xingbie: number;
  constructor(name: string, xingbie: number) {
    this.name = name;
    this.xingbie = xingbie;
  }
  printname() {
    return this.name;
  }
  printxingbie() {
    return this.xingbie;
  }
}

const Person2 = new Person("哈哈哈", 123);

console.log(Person2.printname());

console.log(Person2.printxingbie());