Question about type checking and BindableEvent

Is it possible to simplify this using for loop incase I want to add a new method to the module?

return DraggableUI :: ({
	new: (
		UI: Instance,
		byScale: true?
	) -> ({
		Ignore: (self: { Draggable }, list: { Instance }, instanceCheck: false?) -> (),
		SetTweenInfo: (self: { Draggable }, tweenInfo: TweenInfo) -> (),
		Toggle: (self: { Draggable }, Value: boolean?) -> boolean,
		IgnoreDescendants: (self: { Draggable }) -> (),
		IgnoreChildren: (self: { Draggable }) -> (),
		Destroy: (self: { Draggable }) -> (),

		Released: RBXScriptSignal,
		Started: RBXScriptSignal,
		Moved: RBXScriptSignal,
	}),
})

What this does is only shows the keys that should only be accessed. So it hides those unnecessary methods or keys that shouldn’t be used by the user.

Also about the BindableEvent when connecting is it possible to change the type on func(…any) to something like func(Vector3)?

Screenshot_3

My first idea was this ↓

local show = {
	"Ignore",
	"SetTweenInfo",
	"Toggle",
...
}

-- Then I just loop this show array and change it as a dictionary.
for index = #show, 1, -1 do
	local name = show[index]

	show[name] = DraggableUI[name]
	table.remove(show, index)
end

-- show becomes a type, but this obviously won't work.
type DraggableMethods = typeof(show)