采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老黄,后面的解释还能看懂,就是不理解划线那里为什么要这么定义。难道这段话当做一个知识点硬记着就行了吗?
interface NotOkay { [x: number]: Animal, [x: stirng]: Dog}这样为啥不行呢,举个例子 let a:NotOkay = xxxa[0] 的类型是一个 Animal,a['0'] 的类型是一个 Dog由于 a[0] 会自动转换成 a['0'],相当于说 Animal 是一个 Dog,显然是不合理的。而反过来就可以,因为 Dog 是一个 Animal,Dog 是 Animal 的子类型。
interface Okay { [x:number]: Dog [y:string]: Animal } let A:Okay = { '1': { name: '1' }, 1: { name: '1', color:'red' } } 如上所示,这么定义会报错:不能将类型“{ name: string; color: string; }”分配给类型“Animal”, 对象文字可以只指定已知属性,并且“color”不在类型“Animal”中。 不知道有没有实际的应用呢? 按照" a[0] 会自动转换成 a['0']"的说法,那岂不是直接定义a['0']的类型就好了,反正 a[0]会自动转换过来,读取a['0']的类型
如果想支持 a[0] 和 a['0'],就定义两种类型,如果你只定义 key 为 string 类型的索引,那么 a[0] 就会报错。
明白了,谢谢老黄
登录后可查看更多问答,登录/注册
课程从零开始重构功能完整的JS库,是学习造轮子的不二之选!
1.3k 14
1.6k 13
1.4k 13
1.0k 13
1.4k 11