Skip to content
Back to skills

Typescript Best Practices

ASecurity

Use a top-level async function with an explicit return type and `Promise.all()` so independent requests run concurrently. Check HTTP failures and narrow caught errors as `unknown`: ```ts interface User { readonly id: string; } interface Report { readonly total: number; } async function fetchJson<T>(url: string): Promise<T> { const response = await fetch(url); if (!response.ok) { throw new Error(`Request failed: ${response.status} ${url}`); } return (await response.json()) as T; } export async...

  • 549 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 5, 2026
developmentapi

Works with

  • api

Security analysis

A100/100

Pro scans all 11 files and shows the line behind each finding

Scanned September 5, 2026

npx -y skills add HoangNguyen0403/agent-skills-standard --skill typescript-best-practices --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Typescript Best Practices?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Typescript Best Practices
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hoangnguyen0403-typescript-best-practices-bfd5f986/badge)](https://www.skillsdirectory.com/skills/hoangnguyen0403-typescript-best-practices-bfd5f986)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
Use a top-level async function with an explicit return type and `Promise.all()` so independent requests run concurrently. Check HTTP failures and narrow caught errors as `unknown`:

```ts
interface User {
  readonly id: string;
}

interface Report {
  readonly total: number;
}

async function fetchJson<T>(url: string): Promise<T> {
  const response = await fetch(url);
  if (!response.ok) {
    throw new Error(`Request failed: ${response.status} ${url}`);
  }
  return (await response.json()) as T;
}

export async function fetchDashboardData(
  userUrl: string,
  reportUrl: string,
): Promise<readonly [User, Report]> {
  try {
    return await Promise.all([
      fetchJson<User>(userUrl),
      fetchJson<Report>(reportUrl),
    ]);
  } catch (error: unknown) {
    if (error instanceof Error) {
      throw new Error("Unable to load dashboard data", { cause: error });
    }
    throw new Error("Unable to load dashboard data");
  }
}
```

At an external boundary, validate the JSON with a runtime schema such as Zod rather than relying only on the generic type assertion. Keep the API as a named export and avoid a `.then().catch()` chain.

Files in this skill

  • eval-1.baseline.md831 B
  • eval-1.with-skill.md891 B
  • eval-2.baseline.md877 B
  • eval-2.with-skill.md1.1 KB
  • eval-3.baseline.md1.1 KB
  • eval-3.with-skill.md1 KB
  • trigger-1.md140 B
  • trigger-2.md121 B
  • trigger-3.md104 B
  • trigger-4.md107 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…