打字稿阻止简单的长度检查作为条件隐藏有用的方法和属性
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
为数组或集合
这是一道以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
为数组或集合