Typescript 接口

97 阅读1分钟

记录一些学习笔记

接口

  • 可选

    // 有很多的属性并不是必须的,比如我们在表单中只需要用户输入 姓名,但是不强要求用书输入家庭地址
    interface User {
        userName: string;
        address?: string;
    }
    这样用户可以自己选择是否输入地址
    
  • 只读

    // 有些属性只在初始化时赋值,后面都不再修改
    interface test{
        readonly username: string;
    }
    
  • readonly const

    声明变量时使用const 
    声明属性,和内置成员时使用readonly
    
  • 函数类型

    为函数创建一个接口
    interface func {
        (source: string,address:string):void;
    }
    let mySearch: SearchFunc;
    mySearch = function(source: string, subString: string) {
      let result = source.search(subString);
      return result > -1;
    }
    // 在实现函数时,只会检查函数的参数位置上的类型是否符合,不会检查函数名称
    
  • 类类型

    //类的模型 implements 一个类实现了一个接口时,只对其实例部分进行类型检查。 constructor存在于类的静态部分,所以不在检查的范围内。
    
    interface S {
      select():void;
      state: number;
    }
    
    class Test implements S {
      select () {
    
      }
      public state: number
    }
    
  • 继承接口

    • 单继承

      interface A {
          name:string;
      }
      interface B extends A{
          age: number;
      }
      
    • 多继承

      interface A {
        name: string;
      }
      
      interface B {
        age: number;
      }
      
      interface User extends A, B {
        greet(): void
      }
      
      const user: User = {
        name: 'dell',
        age: 20,
        greet() {
          console.log(`hello ${this.name}`)
        }
      }
      
      user.greet()
      
  • 继承类

// 同样接口也可以继承类中的类型
class Test {
   z:number;
  getValue(){}
}

interface inter extends Test {

}

const value:inter = {
  getValue: ()=>{},
  z:1
}
但是如果Test中有private变量,那么这个inter类型只能用来表示Test类的子类或者派生类
class Child extends Test{}
const value:inter = new Child() // ok 派生类
const value:inter = new Test() // ok 子类