The previous behaviour has issues with typescript expanding types. This implementation does not, so we're gonna roll with that instead.