Аксессоры

Аксесоры или геттеры и сеттеры, или привычнее — свойства, незаменимая часть языка JavaScript, без которой сложно представить современную разработку. Но начинающим TypeScript разработчикам могут быть не совсем очевидны некоторые моменты, каждый из которых будет подробно рассмотрен в этой главе.

Отдельные типы аксеcсоров

На практике, могут возникнуть случаи, когда сеттер нуждается в установке значения, тип которого отличен от типа возвращаемого геттером. И TypeScript позволяет реализовать это.

ts
/** * Геттер возвращает тип number, в то время, как * сеттер ожидает значение принадлежащие к типу объединению * number | string | boolean */ class T0 { private _value = 0; get value(): number { return this._value; } set value(value: number | string | boolean){ } }

Но есть один не очевидный момент заключающийся в том, что определение типа значения сеттера обязанно включать тип, который возвращает геттер. В противном случае возникнет ошибка.

js
class T { private _value = 0; /** * [*] Error -> The return type of a 'get' accessor must be assignable to its 'set' accessor typets(2380) */ get value(): number { // [*] return this._value; } /** * Сеттер не включает тип возвращаемый геттером. */ set value(value: string | boolean){ } }

И поскольку аксессоры могут быть объявлены и в объекте созданного при помощи литерала объекта ({}), стоит также упомянуть, что правила для них ничем не отличаются от правил для классов.