In TypeScript, the operator satisfies
is used as way to check whether a type satisfies an interface or a condition. satisfies
makes sure that the properties of a type that are required are met.
Examples
Suppose we want to create an object called newUser
which uses two types: Username
and Email
, which for this example will be limited to three possible values each, and before taking that newUser
object and submitting it to the database, we want to check to make sure that the newUser
object satisfies the requirement by using both types: Username
and Email
. Here’s how we would do that:
type Username = "auser" | "buser" | "cuser";
type Email = "[email protected]" | "[email protected]" | "[email protected]";
type UserInfo = {
id: number,
username: Username,
email: Email
};
const newUser = {
id: 123,
username: "auser",
email: "[email protected]"
} satisfies userInfo
In the above example, the TypeScript compiler would have no issue with that example. Let’s try to change the value of the username
property in the newUser
object to a username that is different from the three available usernames:
type Username = "auser" | "buser" | "cuser";
type Email = "[email protected]" | "[email protected]" | "[email protected]";
type UserInfo = {
id: number,
username: Username,
email: Email
};
const newUser = {
id: 123,
username: "duser", //Type '"duser"' is not assignable to type 'Username'.
email: "[email protected]"
} satisfies userInfo
In this case the TypeScript compiler gives us the above error and therefore the object does not satisfy the type userInfo
.
We can also use satisfies
along with a utility type. For example, if we want to exclude the property id
in the anotherUser
object, we would do the following:
const anotherUser = {
username: "auser",
email: "[email protected]"
} satisfies Omit<UserInfo, "id">
In the above example, the TypeScript compiler would accept this without errors.