There are three sets of literal types available in TypeScript today: strings, numbers, and booleans; by using literal types you can allow an exact value which a string, number, or boolean must have.
Literal Narrowing
When you declare a variable via var or let, you are telling the compiler that there is the chance that this variable will change its contents. In contrast, using const to declare a variable will inform TypeScript that this object will never change.
// We're making a guarantee that this variable // constString will never change, by using const. // So, TypeScript sets the type to be "Tutorialspots" not string const constString = "Tutorialspots" // On the other hand, a let can change, and so the compiler declares it a string let variableString = "Can change"
String Literal Types
In practice string literal types combine nicely with union types, type guards, and type aliases. You can use these features together to get enum-like behavior with strings.
type acceptTags = "input" | "select" | "button" | "textarea" var tag:acceptTags = "input" //var tag_error:acceptTags = "invalid" //error TS2322: Type '"invalid"' is not assignable to type 'acceptTags'.
Numeric Literal Types
type availableSizes = 14 | 16 | 18 var size1:availableSizes = 14 //size1 = 20 //error TS2322: Type '20' is not assignable to type 'availableSizes'. var size2 = 18 as availableSizes
Boolean Literal Types
interface ValidationSuccess { isValid: true; reason: null; }; interface ValidationFailure { isValid: false; reason: string; }; type ValidationResult = | ValidationSuccess | ValidationFailure;