Đưa TypeScript vào codebase SAPUI5
2026 — 05 — 02
SAPUI5 có trước cái giả định rằng một codebase frontend thì phải có kiểu. Hệ module, cách khai báo class, và các view XML của nó đều được thiết kế cho một thế giới mà editor không giúp được gì. Kiểu thì thêm vào được, nhưng không đều — có phần của framework trả công ngay, có phần thì kháng cự.
Chỗ trả công ngay
Truy cập model là chỗ rõ nhất. Một dòng như thế này là nơi phần lớn bug lúc chạy trú ngụ:
const rate = model.getProperty("/header/exchangeRate");
Mọi thứ trong đó đều là phỏng đoán: đường dẫn có tồn tại không, giá trị có phải số không, sau một lần load hỏng nó có thành null không. Gắn kiểu cho model là chuyển cả ba phỏng đoán đó vào editor.
Formatter và các lời gọi OData theo sau. Cả hai đều là ranh giới — dữ liệu đi qua đó và đổi hình — mà ranh giới đúng là chỗ một dòng khai báo kiểu đáng công gõ.
Chỗ biến thành thủ tục
Các hàm vòng đời của controller gần như chẳng được gì. onInit không nhận tham số, không trả về gì; gắn kiểu cho nó là điền form.
View XML mới là giới hạn thật. View gọi hàm controller bằng tên dạng chuỗi, và không compiler nào kiểm chuỗi đó. Bạn có thể gắn kiểu hoàn hảo cho controller mà vẫn ship một view gọi hàm đã bị xoá từ ba commit trước. Kiểu cho ta cảm giác an toàn rất mạnh trên một khoảng trống mà nó chưa bao giờ bắc qua.
Điều tôi sẽ nói với chính mình lúc bắt đầu
Gắn kiểu cho dữ liệu, đừng gắn cho framework. Hình dạng model, phản hồi service, đầu vào và đầu ra của formatter — đó là chỗ bắt được lỗi thật.
Cưỡng lại việc gắn kiểu cho những phần chỉ tồn tại để làm vừa lòng framework. Mỗi chữ any bị loại bỏ ở đó là một gánh nặng bảo trì mà không đổi lại được gì, và nó kéo diff dài đến mức người review chỉ lướt.
Mục tiêu chưa bao giờ là phủ kín kiểu. Mục tiêu là biết dữ liệu mang hình gì khi nó tới màn hình.