TypeScript接口

接口定义

在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。
interface关键字,接口中属性是可以配置可选的,属性名字定义的后面加一个?符号

interface IPerson{
    firstName: string
    lastName?: string   // 可选属性
}
function fun(p: IPerson) {
    console.log(p.firstName)
}
fun({firstName: '诸葛', lastName: '孔明'})

只读属性

在属性名字的前面加一个readonly修饰,只有新创建时可以修改

interface IPerson{
    readonly firstName: string
    lastName?: string
}
const p: IPerson = {
    firstName: '诸葛'
}
p.firstName = '东方' // 报错

给接口定义索引签名

interface IPerson{
    readonly firstName: string
    lastName?: string
    [propsName:string]: any  // 索引签名,解决添加属性报错问题
}
const p: IPerson = {
    firstName: '诸葛',
    age: 18 // 未添加索引签名,会报错
}

定义函数类型接口

接口能够描述JavaScript中对象拥有的各种各样的外形。 除了描述带有属性的普通对象外,接口也可以描述函数类型。
它就像是一个只有参数列表和返回值类型的函数定义。参数列表里的每个参数都需要名字和类型

interface IPerson{
    (firstNam:string, lastName:string): string
}
// 函数中的参数名,可以不需要和接口中定义的名称一致
let personAllName: IPerson = function(first:string, last:string):string {
    return `${first}_${last}`
}
console.log(personAllName('东方','不败')) // 东方_不败

可索引的类型接口

可索引类型具有一个 索引签名,它描述了对象索引的类型,还有相应的索引返回值类型

interface IPerson{
    [propsName:number]:string
    // [propsName:string]:string
}
let p: IPerson = ['东方不败', '诸葛孔明']
console.log(p[0])

// let p2: IPerson = {'fistName': '东方'}
// console.log(p2.fistName)

类类型

实现接口

使用implements,类中要包含接口中的属性,并且实现接口中的方法

interface IPerson{
    name: string
    say(str:string):string
}
class Person implements IPerson {
    name: string
    say(str:string){
        return str
    }
    constructor(name:string) {
        this.name = name
    }
}
let p = new Person('东方不败')
console.log(p.say('大家好'))
继承接口

使用extends 一个接口可以继承多个接口

interface A{
    name: string
}
interface B{
    age:number
}
interface C{
    address:string
}

interface D extends A,B,C{
    say(str:string):void
}
let d = <D>{name:'东方不败',age:12,say(str:string){console.log(str)}}
console.log(d.name)
d.say('hello')
接口继承类

它会继承类的成员但不包括其实现

class B{
    age:number
    constructor(age:number){
        this.age = age
    }
}
interface A extends B{
    name: string
}

class C implements A {
    name: string  
    age: number // 必须包含A接口继承B类中的age属性
    constructor(age:number,name:string){
        this.name = name
        this.age = age
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山为樽水为沼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值