4、接口和对象类型

作用:匹配形状是否一样,一般常用在对象上。

一般情况下:

// 注意:属性数量、名称得保持一致
interface Obj {
  name: string
}

let obj: Obj = {
  name: 'huangzi',
  // age: 23 // 这样会报错
}

1、重名->重合

interface Obj {
  name: string
}
interface Obj {
  age: number
}

let obj: Obj = {
  name: 'huangzi',
  age: 23
}

2、任意属性 [propName: string]

需要注意的是,一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集

interface Obj {
  name: string
  [propName: string]: any // 这里的类型不能随便写,假如写为string,则接口Obj的内容都为string类型
  // 写为any,因为不确定到底会有哪些类型
}

let obj: Obj = {
  name: 'huangzi', // 定义的值必须与接口保持一致
  age: 23, // 不再校验
  label: '人' // 不再校验
}

3、?(可选操作符),readonly(只读属性)

interface Obj {
  name: string
  age?: number // 可选 ?
}

let obj: Obj = {
  name: 'huangzi'
}
interface Obj {
  readonly id: string, // readonly修饰符
  age: number,
  readonly cb: () => string
}

let obj: Obj = {
  id: 'huangzi',
  age: 23,
  cb: () => { return '123' }
}

obj.id = 'huang' // 报错 现在是只读状态,不可修改
obj.cb = () => { return '222' } // 报错 现在是只读状态,不可修改

4、接口继承 extends

// 继承相当于继续合成
interface Obj extends Obj1 {
  name: string,
  age: number,
  readonly cb: () => string
}

interface Obj1 {
  id: string,
}

let obj: Obj = {
  name: 'huangzi',
  age: 23,
  cb: () => { return '123' },
  id: '123456'
}

let ob: Obj1 = {
  id: '123456'
}

5、定义函数

interface Fn {
  // 是方法,所以是(),有参数且是string类型;返回的是number类型的数组
  (name: string): number[]
}

// 对fn进行约束
const fn: Fn = function (name: string) {
  return [20] // 返回的是number类型的数组
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值