Perhaps each Property should just have its own static `isValidValue` function which does those `typeof` checks. That way the setters can all be done once in `Property` just with these functions overridden when necessary.