Nasu
Nasu
DIAdiscord.js - Imagine an app
Created by Nasu on 7/24/2023 in #djs-questions
Typescript: Missing type guard field for button components?
Code example:
import { ButtonComponentData, StringSelectMenuComponentData, UserSelectMenuComponentData } from "discord.js";

type Example1 = (
| ButtonComponentData
| StringSelectMenuComponentData
| UserSelectMenuComponentData
);

type Example2 = (
| StringSelectMenuComponentData
| UserSelectMenuComponentData
);

const example1: Example1 = {} as any;
const example2: Example2 = {} as any;

if (example1.type === ComponentType.StringSelect) {
// Type of example1: ButtonComponentData | StringSelectMenuComponentData
}

if (example2.type === ComponentType.StringSelect) {
// Type of example2: StringSelectMenuComponentData
}
import { ButtonComponentData, StringSelectMenuComponentData, UserSelectMenuComponentData } from "discord.js";

type Example1 = (
| ButtonComponentData
| StringSelectMenuComponentData
| UserSelectMenuComponentData
);

type Example2 = (
| StringSelectMenuComponentData
| UserSelectMenuComponentData
);

const example1: Example1 = {} as any;
const example2: Example2 = {} as any;

if (example1.type === ComponentType.StringSelect) {
// Type of example1: ButtonComponentData | StringSelectMenuComponentData
}

if (example2.type === ComponentType.StringSelect) {
// Type of example2: StringSelectMenuComponentData
}
I think the cause is that in BaseButtonComponentData, there lacks a field for typeguarding, i.e. type: ComponentType.Button while other components do.
2 replies