Prática: Lançando e Tratando erros

Classe Conta Bancaria

import { SaldoInsuficienteError } from "./errors/saldoinsuficienteerror";
import { ValorInvalidoError } from "./errors/valorinvalidoerror";

export class ContaBancaria{

    private _saldo: number;

    public constructor(){
        this._saldo = 0;
    }

    public depositar(valor: number):void{

        if(valor <= 0){
            throw new ValorInvalidoError('Valor inválido para depósito',valor);
        }

        this._saldo += valor;
    }

    public sacar(valor: number): void{

        if(valor <= 0){
            throw new ValorInvalidoError('Valor inválido para saque',valor);
        }

        if(this._saldo - valor < 0){
            throw new SaldoInsuficienteError('Não insuficiente', this._saldo);
        }

        this._saldo -= valor;
    }

    public transferir(valor: number, contaDestino: ContaBancaria){
        this.sacar(valor);
        contaDestino.depositar(valor);
    }

    public get saldo() : number {
        return this._saldo;
    }

}

Classe SaldoInsuficienteError

export class SaldoInsuficienteError implements Error{

    name: string;
    message: string;
    private _saldoDisponivel: number;

    constructor(message: string, saldoDisponivel: number){
        this.name = 'SaldoInsuficienteError';
        this.message = `${this.name}: ${message}`;
        this._saldoDisponivel = saldoDisponivel;
    }

    public get saldoDisponivel() : number {
        return this._saldoDisponivel;
    }

}

Classe ValorInvalidoError

export class ValorInvalidoError implements Error{

    name: string;
    message: string;
    private _valorInvalido: number;

    constructor(message: string, valorInvalido: number){
        this.name = 'ValorInvalidoError';
        this.message = `${this.name}: ${message}`;
        this._valorInvalido = valorInvalido;
    }

    public get valorInvalido() : number {
        return this._valorInvalido;
    }

}

Versão 5.3 - Todos os Direitos reservados