Table of Contents
Introduction
In Typescript, type inference is powerful, but sometimes we need more control over the types in our code. This is where the as const
keyword comes in. By using as const
, we ensure that Typescript treats our values with specific types, preserving and using their exact value instead of generalising them. In this article, we'll explore how the as const
keyword works and how it can enhance your development with Typescript
Understanding the as const keyword
Typescript uses broader types when inferring the type of a value. For example, when you declare a variable with a string, Typescript will infer the type as string
, rather than the exact string value you assigned. However, using the as const
, you are telling Typescript to treat the value as a constant
.
Let's look at some basic array examples
let message = "Hello, world!"; // Typescript infers type as "string"
const messageOne = "Hello, world!"; // Typescript infers type as "Hello, world!"
const messageTwo = "Hello, world!" as const; // Typescript infers type as "Hello, world!"
Note: The type inferred from the const messageOne
variable is Hello, world!
rather than the general string
type because constants in Typescript already have their types inferred as the exact value assigned.
The difference becomes more evident when you use as const
in contexts like arrays or objects where Typescript would generally infer more generic types.
const colors = ["red", "green", "blue"];// Typescript infers type as string[]
// Method One
const exactColors: ("red" | "green" | "blue")[] = ["red", "green", "blue"]; // type inferred as ["red", "green", "blue"]
// Method Two: using `as const` keyword
const exactColorsTwo = ["red", "green", "blue"] as const; // type inferred as ["red", "green", "blue"]
Well Method One is a valid way of telling Typescript to be specific with the type, but assume there were like a hundred types, it will be tedious and error-prone to type them out. Method Two is what we're going to be using moving forward.
Let's see a screenshot of the type inferred on the Method Two example above in VS code:
The array in the screenshot is readonly
meaning we cannot change the value of the array by adding or deleting elements to or from it.
As shown in the screenshot above, it further emphasizes that the array is readonly
, preventing any additions or deletions of elements.
Now let us try to access values in the arrays defined above using their indexes
const arrayResult = colors[0] // type is inferred as "string"
const arrayResultOne = colors[1] // type is inferred as "string"
const result = exactColorsTwo[0]; // type is inferred as "red"
const resultOne = exactColorsTwo[1]; // type is inferred as "green"
Now let us use a basic object example
Below is a gif showing typescript inferring the type of an object
We can see from the above that before the addition of the as const
keyword, the inference from typescript was generic(i.e string) but on adding the as const
keywords, the type became more specific as seen in the illustration above
On adding the as const
keyword, we also saw the readonly
keyword which prevents us from modifying the original reader
object.
We can take it a step further by trying to access a property in the reader
object and see the type being inferred
Let's now see another example of using the as const
keyword with Template literals
In the example above, hovering over the myMeal
variable gives us the Union of all the possible outputs the myMeal
variable can possibly have.
Now instead of logging what the output might look like in the function, we can hover over the myMeal
variable and see what it looks like.
Conclusion
In this article, we have learnt about the as const
keyword in typescript. Thank you for reading to this point. I ask that you drop a like and share this article with your peers who will benefit from this.
What are your thoughts on this article? Feel free to share your thoughts in the comments section below.
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.