You can encode that "correctly" in pure JS
class LoadingState extends State {}
class ResultState extends State {}
class ErrorState extends State {}
const state: State = new LoadingState
Generally it's a bad pattern to have dependant fields like your example, but you don't need TS to solve it.