请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

可索引类型接口的理解,不知道对不对

老师,可索引类型那里的Animal和Dog可不可以这样理解:

//相当于Dog 继承了Animal的name
interface a {
    breed:string,
    name:string
}
//相当于Animal
interface b{
    name:string
}

interface c {
    [index:number]:a
    [index:string]:b
}

interface d {
    [index:number]:b //报错 数字索引类型“b”不能赋给字符串索引类型“a”
    [index:string]:a
}

结论:
以number查索引值可以隐式转换为string,相当于可以通过number,string 类型查索引值而string查索引值,则只能通过string查索引值

string,nubmer 继承于string
string,number为"子" --> Dog
string为“父” --> Animal


//类似的例子
interface two{
    x:number,
    y:number
}
interface three{
    x:number,
    y:number,
    z:number
}
//这里two是three的父类
let x:two = {x:1,y:2}
let y:three = {x:1,y:2,z:4}

x =y //OK
y =x //报错,需要z

正在回答

1回答

你举得例子和继承没有关系喔,他们之间不存在父子关系,只是接口定义的属性不同

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉6137024 #1
    其实我就想问问在确认父子或继承关系后,这个理解思路是不是对的?
    
    最上面那个示例,继承之后(interface a extends b),我试验过了[index:number]:b也是报错的,而[index:number]:a,[index:string]:b是成立的
    回复 有任何疑惑可以回复我~ 2021-03-03 15:40:12
  • ustbhuangyi 回复 提问者 慕粉6137024 #2
    其实关键是内部有了隐式转换,要考虑到隐式转换后的类型兼容,顺着这个思路,就好理解了。
    回复 有任何疑惑可以回复我~ 2021-03-03 22:21:20
  • 提问者 慕粉6137024 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-03-04 09:30:58

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信