Hello!
Basically I’m working on making an OOP typewriter object, however I have run into an issue where I’m getting typescript warnings when trying to use the typewriter object as an index inside of an internal table that houses events:
Is this a Roblox issue or am I overlooking something?
Script:
--!strict
local typeWriterOptions = require(script.Parent:WaitForChild('TypewriterOptions'))
local typeWriter = {}
typeWriter.__index = typeWriter
typeWriter._events = {}
type TypeWriter = typeof(setmetatable({
['TextToBeWritten'] = '';
['TypeWriterOptions'] = typeWriterOptions.new();
['Playing'] = false;
['Started'] = Instance.new('BindableEvent').Event;
['Ended'] = Instance.new('BindableEvent').Event;
}, typeWriter))
type typeWriterOptions = typeof(typeWriterOptions.new())
function typeWriter.Play(self: TypeWriter)
typeWriter._events[self].Started:Fire()
end
function typeWriter.Stop(self: TypeWriter)
self.Playing = false
end
function typeWriter.Destroy(self: TypeWriter)
for i,v in pairs(typeWriter._events[self]) do
v:Destroy()
end
end
function typeWriter.new(text: string, options: typeWriterOptions?): TypeWriter
if not text then
error('Couldn\'t create typewriter because no text was provided!')
end
local self = {}
self.TextToBeWritten = text
self.TypeWriterOptions = options
self.Playing = false
typeWriter._events[self] = {
['Started'] = Instance.new('BindableEvent');
['Ended'] = Instance.new('BindableEvent');
}
local eventsTable = typeWriter._events[self]
self.Started = eventsTable.Started.Event
self.Ended = eventsTable.Ended.Event
self.Ended:Connect(function()
self:Destroy()
end)
return setmetatable(self, typeWriter)
end
return typeWriter
TypeWriterOptions module:
local typeWriterOptions = {}
function typeWriterOptions.new()
local info = {
['TimeToWaitAfterTypewriterIsFinishedWriting'] = 1;
['TimeToWaitBetweenGraphemes'] = 0.1;
}
return info
end
return typeWriterOptions