TypeScript接口

42 阅读1分钟

1 什么是接口

        接口是一系列抽象的声明,是一些方法特征的集合,这些方法都应该是抽 象的,

需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法

        接口也是一种数据类型

        格式:

     interface interface_nane {} 

2 接口的基本使用

   // 声明一个接口
interface IPersonType {
  readonly name: string		// 定义只读属性
  age: number,				// 定义普通number类型的属性
  friend?: {				// 定义可选属性
    name: string
  }
}

// 定义一个person变量,变量的类型为IPersonType
const person: IPersonType = {
  name: "lucy",
  friend: {
    name: "jack"
  }
}

// 使用变量
console.log(info.friend?.name)
console.log(info.name)

关于接口的基本使用有一些注意点:

  • 给接口命名时,可以使用大写的I字母开头,代表这是个接口(interface

  • 接口的定义和类有些相似,都可以使用可选属性和只读属性

  • 声明对象类型更推荐使用接口的方式,而不是用type关键字

    :void(不返回值)
    
    interface IFullName{
        firstName:string,
        lastName:string
    }
    
    let goddassName:IFullName={
        firstName:"杨",
        lastName:"超越"
    }
    console.log(goddassName.firstName);
    console.log(goddassName.lastName);
    
    
    function say({firstName,lastName}:IFullName):void{
        console.log(`精灵古怪:${firstName}${lastName}`);
    }
        say(goddassName)
    

3 可选属性与只读属性

        可选属性使用:?

        只读属性使用: readonly

readonly与const的区别:做为变量使用的话用const,若做为属性则使用readonly
        // 可选属性  使用?来进行修饰
        interface IFullName{
            firstName:string,
            lastName:string,
            age?:number
        }
        let goddassName:IFullName={
            firstName:"杨",
            lastName:"超越"
        }
        console.log(goddassName.firstName);
        console.log(goddassName.lastName);

        // 只读属性   readonly
        interface IInfo{
            readonly uanme:string;
            readonly uage:number;
        }
        let beauty:IInfo={
            uanme:"汉库克",
            uage:18
        }  

4 索引签名

    定义:索引签名用于描述那些“通过索引得到”的类型

        格式:如[props: string] :any

        应用场景:解决参数问题
        
            interface IFullName{
                firstName:string
                lastName:string
                age?:number
                singName?:string
                [props:string]:any
            }