I've tried getting a similar effect in my games, and I've successfully found a way.
Let's say you have a StringValue in the ReplicatedStorage. Every time it changes a TextLabel's text gives the typewriter text effect you want. This is very simple.
local StringValue = game:GetService("ReplicatedStorage").Message
local TextLabel = script.Parent
local function changeText()
for i = 1,StringValue.Value:len() do
TextLabel.Text = StringValue.Value:sub(1,i)
wait(0.01)
end
end
StringValue:GetPropertyChangedSignal("Value"):Connect(changeText)
In the code, we have two variables, one for the StringValue and the other for the TextLabel. We make a function that fires every time the StringValue's value is changed.
Ok, now for the function, it'll create a loop that repeats by the number of the length of the value. For example, if the value was "Hello", the loop would repeat itself five times. Now since the "i" part represents the number we're looping at currently we'll change the TextLabel's text to the cut up part of the characters one to the actual number we're on. This is kinda hard to explain and there's something that's most likely wrong, but here's a hypothetical scenario.
Let's say the Value is changed into "Hello World!"
It'll loop through the amount of characters in the actual sentence, so it's 12 times. The "i" value changes through the amount of times we've looped so far, so if we've looped five times the value of "i" is five. Okay, with this we'll cut apart the StringValue's value into the first few characters that "i" represents. So if the current value of "i" is five, the part we've just cut apart will be "Hello". We then use this to change the text to the cut apart message.
If we were to print the messages every time it is changed it'll be like this:
H
He
Hel
Hell
Hello
Hello
Hello W
Hello Wo
Hello Wor
Hello Worl
Hello World
Hello World!
Hope this helped! Please point out any mistakes as explaining the code was difficult to explain.