Ba cách kiểm tra ở ba mức khác nhau, và quan trọng nhất là chúng giữ lại lượng thông tin kiểu khác nhau.
ts
type Palette = Record<string, string | [number, number, number]>
const a: Palette = { red: [255, 0, 0], green: '#0f0' }
const b = { red: [255, 0, 0], green: '#0f0' } as Palette
const c = { red: [255, 0, 0], green: '#0f0' } satisfies Palette: Palette(annotation) — kiểm tra đúng, nhưng biến bị mở rộng về đúng kiểu khai báo.a.green.toUpperCase()lỗi vì compiler chỉ còn biếtstring | [number, number, number].as Palette(assertion) — chỉ ép compiler chấp nhận, không kiểm tra đầy đủ; sai kiểu trong một số trường hợp vẫn lọt, và cũng làm mất kiểu cụ thể.satisfies Palette— kiểm tra object có khớpPalettekhông, nhưng giữ nguyên kiểu suy luận cụ thể.c.green.toUpperCase()hợp lệ vì compiler vẫn nhớgreenlàstring, vàc.red[0]cũng dùng được.
Nói ngắn: satisfies cho bạn kiểm tra mà không đánh mất độ chi tiết. Nó là lựa chọn mặc định cho object config, bảng route, map i18n — nơi bạn vừa muốn ràng buộc hình dạng, vừa muốn autocomplete theo đúng key đã viết. as chỉ nên dùng khi bạn thật sự biết nhiều hơn compiler.