TypeScript readonly
TypeScript menyediakan access readonly modifier, memungkinkan kita untuk membuat sebuah class immutable. Pemberian nilai (assignment) ke properti readonly hanya boleh dilakukan di salah satu dari dua tempat.
- Pada saat deklarasi properti
- Di dalam constructor dar kelas yang sama
Contoh :
#Pada saat deklarasi properti
readonly id: number = 1;
#Di dalam constructor kelas
class User {
readonly id: number;
constructor(id: number) {
this.id = id; // valid
}
}
Tidak diperbolehkan mengubah nilai readonly di luar dua tempat tersebut:
user.id = 5; // Error
Intinya
readonly→ hanya bisa di-set sekali- Setelah itu nilainya tidak bisa diubah
- Tujuannya untuk menjaga immutability dan mencegah bug
Contoh penggunaan readonly
Ketika kita membuat DTO
export class CreateUserDto {
readonly name: string;
readonly email: string;
readonly password: string;
}
Ketika kita membuat entity
Untuk column yang tidak bisa diudate
@Entity()
export class User {
@PrimaryGeneratedColumn('uuid')
readonly id: string;
@CreateDateColumn()
readonly createdAt: Date;
}
Ketika kita membuat entity Constructor Injection (NestJS)
@Injectable()
export class UserService {
constructor(
private readonly userRepo: UserRepository,
) {}
}
Ketika kita Domain / Business Object
class AppraisalResult {
constructor(
public readonly marketPrice: number,
public readonly confidence: number,
) {}
}
Source code tutorial Typescript tersedia di github typescript-days