Нет, вы не можете изменить свойства, так как это изменяет значение (объект), и это побочный эффект. Чистые методы могут предоставлять свои данные, но никогда не изменять их. Они могут создавать новые объекты, и тогда они считаются чистыми:
class Car {
color: string;
make: string;
constructor(color = 'red', make = 'Dodge') {
this.color = color;
this.make = make;
}
changeMake(newMake: string): Car {
return new Car(this.color, newMake);
}
}
При этом создается копия оригинальной машины с новой маркой, и, таким образом, в каждом месте, где использовался старый объект, все еще есть старый объект.
Действительно хорошим примером этого является класс Java String, который является чисто функциональным. Каждый метод, который возвращает String, который отличается, всегда возвращает вновь созданный. Весьма подвиг, если подумать, что он был задуман в золотой век ОО.