如何解决消除未定义的警告?来自Object.entries遍历的值应保证为字符串
我已经成功地完成了代码的编译和正常运行,但是我的Typescript编辑器仍在Playground Link的第57行中报告val
的警告
for (const [key,val] of Object.entries(searchInvocation)) {
encodedParams.push(`${encodeURIComponent(key)}=${encodeURIComponent(val)}`);
}
我无法理解如何消除警告。谁能看到一个明显的变化,该变化会导致所需的缩小?
根据这种类型规范,我认为从searchInvocation重构的key
和val
必须分别是SearchField和字符串...
type SearchField = "q" | "sitename" | "filetype";
type SearchInvocation = {
[K in SearchField]?: string
}
错误报告为...
const val: string | undefined
Argument of type 'string | undefined' is not assignable to parameter of type 'string | number | boolean'.
Type 'undefined' is not assignable to type 'string | number | boolean'.ts(2345)
...但是我不知道它怎么可能不确定。
也许这是警告我,该对象可能符合SearchInvocation类型的形状,但其他(非托管)键值对可能已经添加在顶部,并且它们的内容是未知的。
但是,从ProxyInvocation类型遍历Object.entries()时,我没有收到等效警告,该警告看上去有些等效,但必须进行隐式保护。
如果非托管密钥是问题的根源,我不知道如何添加运行时保护措施,以将我遍历的密钥仅过滤到由SearchInvocation类型管理的密钥。我认为这将涉及在javascript运行时阅读SearchField中列出的字符串文字的并集,以过滤掉其他字符串。或者,也许我可以对SearchInvocation类型施加进一步的限制,以永远不接受不是来自SearchField的键。
解决方法
您的错误是因为SearchInvocation类型的属性是可选的,因此,val
中的for of
可能是未定义的。
您可以使用Non-null断言运算符(我不喜欢使用它,因为对我来说就像使用any一样)对Typescript说:“我知道这个值永远不会被定义,请不要在此处检查“
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。