美文网首页
typescript---接口

typescript---接口

作者: 成熟稳重的李先生 | 来源:发表于2020-02-09 16:30 被阅读0次

1.接口一方面可以在面向对象编程中表示为行为的抽象,另外可以用来描述对象的形状;
2.接口就是把一些类中共有的属性和方法抽象出来,可以用来约束实现此接口的类
3.一个类可以继承另一个类并实现多个接口
4.接口像插件一样是用来增强类的,而抽象类是具体类的抽象概念
5.一个类可以实现多个接口,一个接口也可以被多个类实现,但一个类的可以有多个子类,但只能有一个父类

  1. 接口
  • interface中可以用分号或者逗号分割每一项,也可以什么都不加
    1.1 对象的形状
interface Speakable {
    speak(): void;
    name?: string;
    [propName: string]: any  //这句话的意思是,可以有其他的任何属性
}
let speakMan: Speakable = {
    speak():void {
    },
    name: "aaa",
    age: 18
 }

1.2 行为的抽象

//接口可以在面向对象编程中表示为行为的抽象
interface Speakable{
    speak():void;
}
interface Eatable{
    eat():void
}
//一个类可以实现多个接口
class Person implements Speakable,Eatable{  //可以实现多个接口
    speak(){
        console.log('Person说话');
    }
    eat(){}
}
class TangDuck implements Speakable{
    speak(){
        console.log('TangDuck说话');
    }
    eat(){}  //可以有自己的方法
}

1.3 任意属性

//无法预先知道有哪些新的属性的时候,可以使用 `[propName:string]:any`,propName名字是任意的
interface Person {
  readonly id: number;
  name: string;
  [propName: string]: any;
}

let p1 = {
  id:1,
  name:'zhufeng',
  age:10
}
p1.id = 5 //报错,因为id是只读的
  1. 接口的继承
  • 一个接口可以继承自另外一个接口
interface Speakable {
    speak(): void
}
interface SpeakChinese extends Speakable {
    speakChinese(): void
}
class Person implements SpeakChinese {
    speak() {
        console.log('Person')
    }
    speakChinese() {
        console.log('speakChinese')
    }
}
  1. readonly
  • 用 readonly 定义只读属性可以避免由于多人协作或者项目较为复杂等因素造成对象的值被重写
interface Person{
  readonly id:number;
  name:string
}
let tom:Person = {
  id :1,
  name:'zhufeng'
}
tom.id = 1;  // 报错
  1. 函数类型接口
  • 对方法传入的参数和返回值进行约束
interface discount{
  (price:number):number
}
let cost:discount = function(price:number):number{
   return price * .8;
}
  1. 可索引接口
  • 对数组和对象进行约束
  • userInterface 表示index的类型是 number,值的类型必须是 string
  • UserInterface2 表示:index 的类型是 string,值的类型也必须是 string
interface UserInterface {
  [index:number]:string
}
let arr:UserInterface = ['lc1','lc2'];
console.log(arr);

interface UserInterface2 {
  [index:string]:string
}
let obj:UserInterface2 = {name:'lc'};
  1. 类接口
  • 对类的约束
interface Speakable {
    name: string;
    speak(words: string): void
}
class Dog implements Speakable {
    name!: string;
    speak(words:string) {
        console.log(words);
    }
}
let dog = new Dog();
dog.speak('汪汪汪');
  1. 构造函数的类型
  • 在 TypeScript 中,我们可以用 interface 来描述类
  • 同时也可以使用interface里特殊的new()关键字来描述类的构造函数类型
class Animal{
  constructor(public name:string){
  }
}
interface WithNameClass{
  new(name:string):Animal
}
function createAnimal(clazz:WithNameClass,name:string){
   return new clazz(name);
}
let a = createAnimal(Animal,'lcc');
console.log(a.name);

相关文章

  • typescript---接口

    1.接口一方面可以在面向对象编程中表示为行为的抽象,另外可以用来描述对象的形状;2.接口就是把一些类中共有的属性和...

  • typescript---函数

    函数的定义 可以指定参数的类型和返回值的类型 2.函数表达式 定义函数类型通过关键字type来定义函数类型 可选参...

  • typescript---类

    如何定义类"strictPropertyInitialization": true / 启用类属性初始化的严格检查...

  • TypeScript---类

    TS(集成可选类型批注)支持ES6。 接下来我们创建一个类文件class.ts。 Shape 类中有两个属性 ar...

  • TypeScript---继承

    继承一个已存在的类并创建一个派生类。继承使用关键字extends。 派生类Shape3D: 1,派生类Shape3...

  • TypeScript---类型批注

    TS通过类型批注提供静态类型,方便在编译时启动类型检查,这不是必须的,甚至可以被忽略,去使用js常规的动态类型。...

  • typescript---泛型

    泛型(Generics)是指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性泛...

  • typescript---结构类型系统

    接口的兼容性 如果传入的变量和声明的类型不匹配,TS就会进行兼容性检查 原理是Duck-Check(一个对象,只要...

  • 接口接口接口

    发现很多朋友对于接口都很纠结,阐述一下个人对接口的理解。 接口分为很多种类型,程序语言内部接口 移动端和服务端接口...

  • Android常用接口

    不知名接口 头条接口: 科技接口: 财经接口: 军事接口: 体育接口: 房产接口: 足球接口: 娱乐接口: 电影接...

网友评论

      本文标题:typescript---接口

      本文链接:https://www.haomeiwen.com/subject/dsmwxhtx.html