Не совсем понял, когда проверка выполняется, если в конструкторе, то воспользуйтесь деструктуризацией аргументов, и делайте проверки до инициализации свойств объекта - это как минимум наглядно покажет все ограничения на входные параметры конструктора.
class Point {
constructor(x, y, ...other) {
if(other.length > 0){
throw 'Only 2 number arguments';
}
if(typeof x !== 'number'){
throw TypeError(`The first argument must be number but have got ${typeof x}`);
}
if(typeof y !== 'number'){
throw TypeError(`The second argument must be number but have got ${typeof y}`);
}
this.x = x;
this.y = y;
}
}
Да, в JS можно написать throw 'Текст ошибки'; И это создаст вполне себе нормальный объект исключения класса Error. Также существуют разные стандартные классы исключений. Если требуется кастомный типизированый класс исключения, то просто унаследуйте новый класс от Error и используйте его в кострукции throw.
На самом деле, не совсем понимаю, зачем проверку свойств объекта выделили в отдельный метод. Это нужно дл какой-то валидации вне конструктора?