打字稿阻止简单的长度检查作为条件隐藏有用的方法和属性

Typescript preventing simple length check as conditional conceals helpful methods and properties

这是一道以discord.js为例的打字题,不需要懂库来帮忙

我正在从普通 js 转换我的应用程序,当我调用一个方法时,它会给我一个带有键和值的映射类型。现在我正在使用打字稿并且库有类型定义,我无法再检查响应的大小。

const attachments = interaction.options.getMessage('message', true).attachments;

所以以前我只能调用大小 属性 但现在我仅限于这些类型:

attachments: Collection<string, MessageAttachment> | APIAttachment[]

通过使用 as 关键字只选择一个条件是否是一种不好的做法,这样我就有更多的属性可以玩了?如何获取附件的大小或安全地解析为一种类型?他们只有迭代器。

我了解 typescript 的好处,并且正在避免任何 hacky 解决方案。我正在努力学习更好地使用打字稿,并想使用图书馆给我的类型。

我会推荐这个简单的修复方法

你可以这样做:

如果希望附件为合集

import { Collection } from "discord.js"
    
if(attachments instanceof Collection){
    // Do this
}

如果您希望附件是一个数组

import { Collection } from "discord.js"

if(!(attachments instanceof Collection)){
    // Do that
}

TypeScript 将自动检测 attachments 为数组或集合