typescript(2):接口

接口

  1. 介绍

    typescript 中,接口的作用就是为类型检查命名和为代码获第三方代码提供契约

  2. 基本写法

    interface label {
        labelStr: string
    }
    
  3. 可选属性

    接口里的属性不全都是必需的。带有可选属性的接口预普通的接口定义差不多,只是在可选属性名字定义的后面加上一个 ? 符号

    1. 可选属性的书写方法
    interface config {
        color?: string,
        width?: string
    }
    
  4. 只读属性

    只能在对象刚刚创建时修改的属性,可以在属性名前用 readonly 来指定只读属性

    1. 书写方法
    interface config {
        readonly x: number
    }
    
  5. 额外的属性检查

    如果一个对象字面量存在任何“目标类型”不包含的属性时,会返回一个错误

    1. 举例
    // 定义接口
    interface config {
        color?: string,
        width?: number
    }
    
    // 创建函数使用接口
    function user(config: config): {color: string, area: number} {
        ...
    }
    
    // 调用函数的时候
    let User = user({colors: 'red', width: 100})
    // 报错,不存在colors
    
    1. 解决方法1:使用 类型断言
    let User = user({color: 'red', width: 100} as config)
    
    1. 解决方法2:在接口中添加索引签名
    interface config {
        color?: string,
        width?: number,
        [propName: string]: any
    }
    
  6. 函数类型

    除了描述带有属性的普通对象意外,接口还可以描述函数类型

    1. 书写方法
    // 只有参数列表和返回值类型的函数定义
    interface SearchFunc {
        (source: string, subString: string): boolean
    }
    
    1. 对于函数的类型检查来说,函数的参数名不需要预接口里定义的名字相匹配
  7. 可索引的类型

    可索引类型描述了对象索引的类型,还有相应的索引返回值类型

    1. 书写方法
    interface config {
        [index: number]: string
    }
    
    let myConfig: config
    myConfig = ['zx', 'sjx']
    
    let yourConfig: string = myConfig[0]
    
    1. 索引过程:当使用 number 来索引的时候,JavaScript会将它转换成 string 然后再去索引对象
    2. 拓展:将索引签名设置为只读,就防止了给索引赋值
    interface readonlyConfig {
        readonly [index: number]: string
    }
    
  8. 类类型

    使用接口强制一个类去符合某种契约

    1. 书写方法
    interface clock {
        currentDate: Date
    }
    
    class Clock implements clock {
        currentDate: Date
        constructor(){
            ...
        }
    }
    
    // 也可以在接口中描述一个方法,在类里实现它
    
    interface clock2 {
        currentDate: Date
        setTime(d: Date)
    }
    

    提示:接口只是描述了类的公共部分,而不是公共和私有两部分。它不会检查类是否具有某些私有成员。

  9. 继承接口

    可以将一个接口里的成员复制到另一个接口里,可以更灵活的将接口分割到可重用的模块里

    1. 书写方法
    interface Sheet {
        color: string
    }
    
    interface Config extends Sheet {
        loading: boolean
    }
    
    
  10. 混合类型

    一个接口对象可以同时作为函数和对象使用,并带有额外的属性。

    1. 书写方法
    interface Counter {
        (start: number): string
        interval: number
        reset(): void
    }
    
    function useCounter(): Counter {
        let counter = <Counter>function (start: number) {}
        counter.interval = 123
        counter.reset = function(){}
        return counter
    }
    
    let c = getCounter()
    c(10)
    c.reset()
    c.interval = 5.0
    
  11. 接口继承类

    创建一个接口继承一个拥有私有或受保护的类时,这个接口类型只能被这个类或其子类所实现 (implement)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值