Literal type là kiểu chỉ nhận đúng một giá trị cụ thể.
typescript
type Direction = 'left' | 'right' | 'up' | 'down'
type Port = 80 | 443
type Flag = true
let d: Direction = 'left'
d = 'top' // Lỗi: không nằm trong 4 giá trị cho phépDùng thay enum mà không sinh code lúc chạy:
typescript
// enum: sinh ra một object trong bundle
enum Status { Loading, Success, Error }
// literal union: bị xoá hoàn toàn khi biên dịch
type Status = 'loading' | 'success' | 'error'Lưu ý — TypeScript mở rộng kiểu khi dùng let:
typescript
const a = 'left' // kiểu: 'left' — literal
let b = 'left' // kiểu: string — bị mở rộng!
function go(d: Direction) {}
go(b) // Lỗi: string không gán được cho DirectionGiữ literal bằng as const:
typescript
let b = 'left' as const // 'left'
const config = { dir: 'left' } as const // { readonly dir: 'left' }
const dirs = ['left', 'right'] as const // readonly ['left', 'right']
type D = (typeof dirs)[number] // 'left' | 'right' — suy ra union từ mảngChốt: literal type là nền tảng của discriminated union và thu hẹp kiểu — hai công cụ quan trọng nhất khi mô hình hoá trạng thái trong TypeScript.