javascript-在Typescript中使用Object.keys时避免隐式“ any”类型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-在Typescript中使用Object.keys时避免隐式“ any”类型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1506字,纯文字阅读大概需要3分钟。
内容图文
![javascript-在Typescript中使用Object.keys时避免隐式“ any”类型](/upload/InfoBanner/zyjiaocheng/670/94ffffba496b499aac69e30c406ab2a2.jpg)
我有一个带有已键入键的对象,并且我想遍历它并保持其类型,避免“元素隐式具有“任何”类型,因为“ ContactList”没有索引签名”.
我知道在Typescript的GitHub页面上对此进行了详尽的讨论,但是我在这里找不到任何解决方案.尝试用枚举和联合,但我仍然收到错误.
枚举(playground)的示例
enum Names {
Joe,
Bill,
Bob
}
type ContactList = {
[key in Names]: {
isFriend: boolean;
}
}
const contactList: ContactList = {
[Names.Joe]: {
isFriend: true,
},
[Names.Bill]: {
isFriend: false,
},
[Names.Bob]: {
isFriend: true,
},
};
Object.keys(contactList).forEach(name => {
// turn on 'noImplicitAny' and get error
console.log(contactList[name])
})
联合示例(playground)
type Names = 'joe' | 'bill' | 'bob'
type ContactList = {
[K in Names]: {
isFriend: boolean;
}
}
const contactList: ContactList = {
joe: {
isFriend: true,
},
bill: {
isFriend: false,
},
bob: {
isFriend: true,
},
};
Object.keys(contactList).forEach(name => {
// turn on 'noImplicitAny' and get error
console.log(contactList[name])
})
无论哪种方式,我都告诉打字稿“该对象中唯一允许使用的键来自名称”,据我了解的索引签名,[名称中的键]应该是一个,所以我不确定为什么会看到一个错误.抱歉,如果这是一个菜鸟问题,那么我对TS还是有点绿色.谢谢.
解决方法:
由于Object.keys返回的属性可能比按类型实际包含的对象更多,因此其返回类型为intentionally,键入为string [].否则,类型良好的代码会在运行时抛出意外异常,这很常见,如explained in this answer.
因此,您必须使索引类型适用于字符串:
type ContactList = {
[key: string]: {
isFriend: boolean;
},
};
或者您打字并希望最好:
contactList[name as Names]
您也可以:
console.log(...Object.values(contactList));
内容总结
以上是互联网集市为您收集整理的javascript-在Typescript中使用Object.keys时避免隐式“ any”类型全部内容,希望文章能够帮你解决javascript-在Typescript中使用Object.keys时避免隐式“ any”类型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。