Tính toán chi phí và tiết kiệm trong TypeScript

Nhà phát triển ở Khu vực kinh tế Châu Âu (EEA)

Bạn có thể tạo các phép tính của riêng mình bằng TypeScript. Đoạn mã ở cuối trang này giúp bạn xác định xem việc lắp đặt tấm pin mặt trời có rẻ hơn về lâu dài hay không, hoặc bạn có nên tiếp tục thanh toán hoá đơn tiền điện như hiện tại hay không.

Sau đây là thông tin tổng quan về cách mã này xác định chi phí của tấm pin mặt trời.

Phần 1: Yêu cầu về hệ thống và cách thiết lập

Trước tiên, hãy xác định mức sử dụng điện và hoá đơn hiện tại:

  • Mỗi tháng bạn sử dụng bao nhiêu điện? (monthlyKwhEnergyConsumption)
  • Chi phí cho lượng điện đó là bao nhiêu? (energyCostPerKwh)

Tiếp theo, hãy nhập kế hoạch về hệ mặt trời của bạn:

  • Có bao nhiêu tấm pin? (panelsCount)
  • Các tấm pin này có công suất bao nhiêu? (panelCapacityWatts)
  • Chi phí lắp đặt là bao nhiêu? (installationCostPerWatt)
  • Hệ thống có chiết khấu nào không? (solarIncentives)

Phần 2: Tính toán

Dựa trên các giá trị đã nhập, mã này sẽ tính toán:

  • yearlyProductionAcKwh: Tổng lượng điện năng hàng năm mà các tấm pin mặt trời của bạn có thể tạo ra.
  • totalCostWithSolar: Chi phí điện trong nhiều năm khi sử dụng tấm pin mặt trời.
  • totalCostWithoutSolar: Chi phí điện trong nhiều năm khi không sử dụng tấm pin mặt trời.

Phần 3: Kết quả

Mã này cũng cho bạn biết những thông tin sau:

  • savings: Mức chênh lệch giữa chi phí khi có và không có tấm năng lượng mặt trời.
  • breakEvenYear: Số năm cho đến khi chi phí lắp đặt tấm pin mặt trời bằng với khoản tiết kiệm tiền điện.

Mã mẫu

// Solar configuration, from buildingInsights.solarPotential.solarPanelConfigs
let panelsCount = 20;
let yearlyEnergyDcKwh = 12000;

// Basic settings
let monthlyAverageEnergyBill: number = 300;
let energyCostPerKwh = 0.31;
let panelCapacityWatts = 400;
let solarIncentives: number = 7000;
let installationCostPerWatt: number = 4.0;
let installationLifeSpan: number = 20;

// Advanced settings
let dcToAcDerate = 0.85;
let efficiencyDepreciationFactor = 0.995;
let costIncreaseFactor = 1.022;
let discountRate = 1.04;

// Solar installation
let installationSizeKw: number = (panelsCount * panelCapacityWatts) / 1000;
let installationCostTotal: number = installationCostPerWatt * installationSizeKw * 1000;

// Energy consumption
let monthlyKwhEnergyConsumption: number = monthlyAverageEnergyBill / energyCostPerKwh;
let yearlyKwhEnergyConsumption: number = monthlyKwhEnergyConsumption * 12;

// Energy produced for installation life span
let initialAcKwhPerYear: number = yearlyEnergyDcKwh * dcToAcDerate;
let yearlyProductionAcKwh: number[] = [...Array(installationLifeSpan).keys()].map(
  (year) => initialAcKwhPerYear * efficiencyDepreciationFactor ** year,
);

// Cost with solar for installation life span
let yearlyUtilityBillEstimates: number[] = yearlyProductionAcKwh.map(
  (yearlyKwhEnergyProduced, year) => {
    const billEnergyKwh = yearlyKwhEnergyConsumption - yearlyKwhEnergyProduced;
    const billEstimate =
      (billEnergyKwh * energyCostPerKwh * costIncreaseFactor ** year) / discountRate ** year;
    return Math.max(billEstimate, 0); // bill cannot be negative
  },
);
let remainingLifetimeUtilityBill: number = yearlyUtilityBillEstimates.reduce((x, y) => x + y, 0);
let totalCostWithSolar: number =
  installationCostTotal + remainingLifetimeUtilityBill - solarIncentives;
console.log(`Cost with solar: $${totalCostWithSolar.toFixed(2)}`);

// Cost without solar for installation life span
let yearlyCostWithoutSolar: number[] = [...Array(installationLifeSpan).keys()].map(
  (year) => (monthlyAverageEnergyBill * 12 * costIncreaseFactor ** year) / discountRate ** year,
);
let totalCostWithoutSolar: number = yearlyCostWithoutSolar.reduce((x, y) => x + y, 0);
console.log(`Cost without solar: $${totalCostWithoutSolar.toFixed(2)}`);

// Savings with solar for installation life span
let savings: number = totalCostWithoutSolar - totalCostWithSolar;
console.log(`Savings: $${savings.toFixed(2)} in ${installationLifeSpan} years`);