type UserId = `user_${string}`;
type GroupId = `group_${string}`;
const addUserId = (id: UserId) => {
// do something
}
const processId = (id: string) => {
if (id.startsWith('user_') {
// type error here:
addUserId(id);
} else if (otherCondition)
// do other things
}
}
Instead you define a function:
const isUserId = (some: string): some is UserId => some.startsWith('user_');
Now you can use it as follows:
const processId = (id: string) => {
if (isUserId(id)) {
// no more error:
addUserId(id);
} else if (otherCondition)
// do other things
}
}
Comments
Define a type guard using a "type predicate"[1].
For example:
Instead you define a function: Now you can use it as follows: [1]: https://www.typescriptlang.org/docs/handbook/2/narrowing.htm...