Use a branded type so a validated ID is not interchangeable with an arbitrary string: ```ts export type UserId = string & { readonly __brand: "UserId" }; export function parseUserId(value: string): UserId { if (!/^usr_[a-zA-Z0-9]+$/.test(value)) { throw new Error("Invalid user ID"); } return value as UserId; } export function loadUser(id: UserId): Promise<User> { return repository.findById(id); } ``` Only the parser (or a schema validator at the input boundary) should create the brand. The `l...
Scanned 9/5/2026
Install to Claude Code
npx -y skills add HoangNguyen0403/agent-skills-standard --skill typescript-language --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Typescript Language?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/hoangnguyen0403-typescript-language-6215ff78)More formats (shields.io, HTML) on the badges page.
Use a branded type so a validated ID is not interchangeable with an arbitrary string:
```ts
export type UserId = string & { readonly __brand: "UserId" };
export function parseUserId(value: string): UserId {
if (!/^usr_[a-zA-Z0-9]+$/.test(value)) {
throw new Error("Invalid user ID");
}
return value as UserId;
}
export function loadUser(id: UserId): Promise<User> {
return repository.findById(id);
}
```
Only the parser (or a schema validator at the input boundary) should create the brand. The `loadUser` signature now rejects a plain `string`; avoid a non-null assertion and keep the runtime validation separate from the compile-time brand.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!