打字稿阻止简单的长度检查,因为条件隐藏了有用的方法和属性
Posted
技术标签:
【中文标题】打字稿阻止简单的长度检查,因为条件隐藏了有用的方法和属性【英文标题】:Typescript preventing simple length check as conditional conceals helpful methods and properties 【发布时间】:2022-01-02 02:33:49 【问题描述】:这是一道打字稿题,以discord.js为例,不需要懂库来帮忙。
我正在从普通的 js 转换我的应用程序,当我调用一个方法时,它会为我提供一个带有键和值的地图类型。现在我正在使用 typescript 并且库具有类型定义,我无法再检查响应的大小。
const attachments = interaction.options.getMessage('message', true).attachments;
所以以前我可以只调用 size 属性,但现在我仅限于这些类型:
附件:集合
| API附件[]
使用 as 关键字只选择一个条件句是不好的做法,以便我有更多的属性可以使用?如何获得附件的大小或安全地解析为一种类型?它们只有迭代器。
我了解打字稿的好处,并避免使用任何 hacky 解决方案。我正在努力学习更好地使用 typescript,并希望使用库提供给我的类型。
【问题讨论】:
我以前从未见过APIAttachment
...我会说使用as Collection<string, MessageAttachment>
很好
【参考方案1】:
我会推荐这个简单的修复方法
你可以这样做:
如果您希望附件成为一个集合
import Collection from "discord.js"
if(attachments instanceof Collection)
// Do this
或者如果你希望附件是一个数组
import Collection from "discord.js"
if(!(attachments instanceof Collection))
// Do that
TypeScript 然后会自动检测attachments
是一个数组或集合
【讨论】:
以上是关于打字稿阻止简单的长度检查,因为条件隐藏了有用的方法和属性的主要内容,如果未能解决你的问题,请参考以下文章