Token导航 LogoToken导航

Agent Skill · 效率

typescript-skills(TypeScript skills 前端)

typescript-skills 用于补充效率相关能力,适合在 OpenClaw 中需要让 Agent 承接效率相关任务时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

typescript-skills 是效率类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为需要联网;许可证为 MIT-0,第三方扫描已通过,按安装量在效率类的 21,003 个 Skill 里排第 212。

总安装 147,957周安装 6,044GitHub Stars 4下载 47,385核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.6

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:typescript-skills(TypeScript skills 前端)
来源仓库:https://github.com/wscats/typescript-skills
安装命令:
openclaw skills install typescript-skills
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install typescript-skills

这个 Skill 是做什么的

效率类 Skill 把重复的整理、汇总、转换工作交给助手完成,减少手工复制粘贴。

提供 TypeScript 编码最佳实践和标准代码生成。适用于前端项目中的类型安全和代码规范维护。适用宿主包括 OpenClaw,接入前应确认版本、权限和运行环境要求。通过 clawhub 安装,建议结合项目配置调整使用方式。使用前应确认项目依赖和构建工具链是否兼容。

typescript-skills 属于效率类 Skill,可作为该场景下的辅助能力补充。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install typescript-skills;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

typescript-skills 怎么安装?

在终端执行 openclaw skills install typescript-skills。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

typescript-skills 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

typescript-skills 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

typescript-skills 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

typescript-skills 用的人多吗?

公开数据是累计安装 147,957 次,近一周安装 6,044 次,下载 47,385 次,GitHub 4 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

typescript-skills 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理效率类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

效率类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
github

GitHub 代码协作 · OpenClaw

7,632,918545需要联网MIT-0通过
nano-pdf

Nano PDF 文档 · OpenClaw

4,249,476231需要联网MIT-0通过
auto-updater

自动更新程序 · OpenClaw

2,964,063386操作浏览器MIT-0通过
video-frames

视频帧 · OpenClaw

2,621,304112需要联网MIT-0通过
gemini

Gemini 助手 · OpenClaw

2,547,39648需要联网MIT-0有提醒
typescript-skills

TypeScript skills 前端 · 本页

147,9574需要联网MIT-0通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

name
typescript
slug
typescript
license
MIT
description
>

TypeScript Style Guide Skill

Activation: This skill activates whenever the user says or implies TypeScript. It responds with standards-compliant TypeScript code and can explain any rule on demand.

Table of Contents

  1. General Principles
  2. Naming Conventions
  3. Types & Interfaces
  4. Enums
  5. Variables & Constants
  6. Functions
  7. Classes
  8. Modules & Imports
  9. Generics
  10. Error Handling
  11. Async / Await & Promises
  12. Comments & Documentation
  13. Formatting & Style
  14. Null & Undefined Handling
  15. Type Assertions & Guards
  16. React & JSX (when applicable)
  17. Testing Conventions
  18. Tooling & Configuration

1. General Principles

  • Strict mode always: Enable "strict": true in tsconfig.json. This turns on noImplicitAny,

strictNullChecks, strictFunctionTypes, and more.

  • Prefer readability over cleverness: Code is read far more often than written. Favour explicit,

self-documenting code.

  • Minimise any: Treat every use of any as tech debt. Prefer unknown when the type is

truly not known, or use generics.

  • Immutability by default: Use const over let; prefer readonly properties and

ReadonlyArray<T> / Readonly<T> utility types.

  • Single responsibility: Each file, class, and function should have one clear purpose.
  • Keep files small: A file should ideally stay under 400 lines. If it grows larger, consider

splitting it.


2. Naming Conventions

ConstructConventionExample
Variable / FunctioncamelCasegetUserName, isActive
Boolean variablecamelCase with prefixisLoading, hasAccess, canEdit
Constant (module)UPPER_SNAKE_CASEMAX_RETRY_COUNT, API_BASE_URL
Constant (local)camelCaseconst defaultTimeout = 3000
ClassPascalCaseUserService, HttpClient
InterfacePascalCaseUserProfile, ApiResponse
Type aliasPascalCaseUserId, Theme
EnumPascalCaseDirection, HttpStatus
Enum memberPascalCaseDirection.Up, HttpStatus.Ok
Generic parameterSingle uppercase letter or descriptive PascalCaseT, TKey, TValue
File namekebab-case.tsuser-service.ts, api-client.ts
Test file namekebab-case.test.ts or kebab-case.spec.tsuser-service.test.ts
React component filePascalCase.tsxUserProfile.tsx
Private fieldcamelCase (no _ prefix)private count: number

Additional Naming Rules

  • Do NOT prefix interfaces with I (e.g., ~~IUser~~ → User).
  • Do NOT suffix types/interfaces with Type or Interface.
  • Use descriptive names. Avoid single-letter variables except for conventional usages like loop

indices (i, j) or generic type parameters (T, K, V).

  • Acronyms of 2 characters stay uppercase (IO, ID); 3+ characters use PascalCase

(Http, Xml, Api).


3. Types & Interfaces

Prefer interface for Object Shapes

// ✅ Good — use interface for object shapes
interface User {
  readonly id: string;
  name: string;
  email: string;
}

// ✅ Good — use type for unions, intersections, mapped types
type Status = 'active' | 'inactive' | 'suspended';
type Result<T> = Success<T> | Failure;

When to Use type vs interface

Use interface when …Use type when …
Defining the shape of an object or classCreating union or intersection types
You want declaration mergingUsing mapped / conditional types
Extending other interfacesAliasing primitive or tuple types

Rules

  • Always annotate function return types explicitly for public APIs.
  • Let TypeScript infer types for local variables when the type is obvious.
  • Prefer type over interface for function signatures:
  type Comparator<T> = (a: T, b: T) => number;
  • Avoid empty interfaces. If extending, include at least a comment explaining intent.
  • Use Record<K, V> instead of { [key: string]: V }.
  • Use utility types (Partial<T>, Pick<T, K>, Omit<T, K>, Required<T>) to derive types

rather than duplicating.


4. Enums

Prefer String Enums

// ✅ Good — string enum for readability and debuggability
enum Direction {
  Up = 'UP',
  Down = 'DOWN',
  Left = 'LEFT',
  Right = 'RIGHT',
}

When to Use const Enum or Union Types

// ✅ Good — const enum for zero-runtime-cost enums (no reverse mapping needed)
const enum HttpMethod {
  Get = 'GET',
  Post = 'POST',
  Put = 'PUT',
  Delete = 'DELETE',
}

// ✅ Also good — string literal union (simpler, tree-shakeable)
type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';

Rules

  • Do NOT use numeric enums without explicit values (auto-increment is fragile).
  • Prefer string literal union types over enums when the set is small and no namespace features

are needed.

  • Never mix string and numeric members in the same enum.

5. Variables & Constants

// ✅ Good
const maxRetries = 3;
const baseUrl = 'https://api.example.com';
let currentAttempt = 0;

// ❌ Bad — using var
var legacyValue = 'old';

// ❌ Bad — using let when value never changes
let neverReassigned = 42;

Rules

  • Always use const unless the variable needs reassignment; then use let.
  • Never use var.
  • Declare variables as close to their first usage as possible.
  • One variable declaration per statement.
  • Prefer destructuring for extracting properties:
  // ✅ Good
  const { name, age } = user;

  // ❌ Bad
  const name = user.name;
  const age = user.age;
  • Use as const for immutable literal objects / arrays:
  const ROUTES = {
    home: '/',
    about: '/about',
    contact: '/contact',
  } as const;

6. Functions

Function Declarations

// ✅ Good — explicit return type for public functions
function calculateTotal(items: CartItem[]): number {
  return items.reduce((sum, item) => sum + item.price * item.quantity, 0);
}

// ✅ Good — arrow function for callbacks / short lambdas
const double = (n: number): number => n * 2;

// ✅ Good — use default parameters instead of optional + fallback
function createUser(name: string, role: Role = Role.Viewer): User {
  // ...
}

Rules

  • Annotate return types for all exported / public functions.
  • Prefer arrow functions for callbacks and inline functions.
  • Prefer function declarations for top-level named functions (they are hoisted and more

readable in stack traces).

  • Maximum parameters: 3. If more are needed, group them into an options object:
  // ✅ Good
  interface CreateUserOptions {
    name: string;
    email: string;
    role?: Role;
    department?: string;
  }
  function createUser(options: CreateUserOptions): User { ... }

  // ❌ Bad — too many positional parameters
  function createUser(name: string, email: string, role: Role, dept: string): User { ... }
  • Do not use arguments; use rest parameters (...args) instead.
  • Avoid Function type. Use specific function signatures.
  • Keep functions small — ideally under 30 lines of logic.
  • Functions should do one thing.
  • Prefer early returns to reduce nesting:
  // ✅ Good
  function getDiscount(user: User): number {
    if (!user.isPremium) return 0;
    if (user.yearsActive < 2) return 5;
    return 10;
  }

7. Classes

// ✅ Good
class UserService {
  private readonly repository: UserRepository;

  constructor(repository: UserRepository) {
    this.repository = repository;
  }

  async findById(id: string): Promise<User | undefined> {
    return this.repository.get(id);
  }
}

Rules

  • Prefer composition over inheritance.
  • Use readonly for properties that should not change after construction.
  • Member ordering:

1. Static fields 2. Instance fields 3. Constructor 4. Static methods 5. Public methods 6. Protected methods 7. Private methods

  • Use explicit access modifiers (public, protected, private) on every member.
  • Do NOT prefix private members with _. TypeScript's private keyword is sufficient.
  • Use # (ES private fields) when true runtime privacy is required.
  • Prefer parameter properties for simple constructor-only assignments:
  class Logger {
    constructor(private readonly prefix: string) {}
  }
  • Avoid classes with only static methods — use plain functions in a module instead.
  • Implement interfaces explicitly:
  class UserRepositoryImpl implements UserRepository { ... }

8. Modules & Imports

// ✅ Good — named exports
export function parseConfig(raw: string): Config { ... }
export interface Config { ... }

// ✅ Good — re-export barrel file (index.ts)
export { parseConfig } from './parse-config';
export type { Config } from './parse-config';

Rules

  • Prefer named exports over default exports (better refactoring, auto-import support).
  • Use default exports only for React components if the project convention requires it.
  • Use import type / export type for type-only imports to help bundlers tree-shake:
  import type { User } from './user';
  • Group and order imports:

1. Node built-ins (node:fs, node:path) 2. External packages (react, lodash) 3. Internal aliases (@/utils, @/components) 4. Relative parent (../) 5. Relative sibling (./)

  • Separate each group with a blank line.
  • Do NOT use wildcard imports (import * as) unless re-exporting a module namespace.
  • Keep barrel files (index.ts) thin — do not add logic.

9. Generics

// ✅ Good — descriptive when intent is ambiguous
function merge<TTarget, TSource>(target: TTarget, source: TSource): TTarget & TSource {
  return { ...target, ...source };
}

// ✅ Good — single-letter when intent is obvious
function identity<T>(value: T): T {
  return value;
}

// ✅ Good — constrained generics
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}

Rules

  • Use a single uppercase letter (T, U, K, V) for simple generics.
  • Use descriptive PascalCase prefixed with T (TKey, TValue, TResult) when there are

multiple type parameters or the purpose is not obvious.

  • Always add constraints when possible (<T extends SomeType>).
  • Avoid unnecessary generics — if a type parameter is used only once, it's likely not needed.
  • Prefer generic utility types (Array<T>, Promise<T>, Map<K, V>) over their shorthand where

readability benefits.


10. Error Handling

// ✅ Good — custom error class
class AppError extends Error {
  constructor(
    message: string,
    public readonly code: string,
    public readonly statusCode: number = 500,
  ) {
    super(message);
    this.name = 'AppError';
  }
}

// ✅ Good — typed error handling
function parseJson<T>(raw: string): T {
  try {
    return JSON.parse(raw) as T;
  } catch (error) {
    throw new AppError(
      `Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`,
      'PARSE_ERROR',
      400,
    );
  }
}

Rules

  • Never swallow errors silently (empty catch blocks).
  • Use custom error classes that extend Error for domain-specific errors.
  • Type the catch variable as unknown (default in TS 4.4+) and narrow before use.
  • Prefer Result / Either patterns for expected failures in libraries:
  type Result<T, E = Error> = { ok: true; value: T } | { ok: false; error: E };
  • Always clean up resources in finally blocks or use disposable patterns.
  • Log errors with sufficient context (operation name, input summary, stack trace).

11. Async / Await & Promises

// ✅ Good — async/await
async function fetchUser(id: string): Promise<User> {
  const response = await httpClient.get<User>(`/users/${id}`);
  return response.data;
}

// ✅ Good — parallel execution
async function fetchDashboard(userId: string): Promise<Dashboard> {
  const [user, posts, notifications] = await Promise.all([
    fetchUser(userId),
    fetchPosts(userId),
    fetchNotifications(userId),
  ]);
  return { user, posts, notifications };
}

Rules

  • Prefer async/await over .then() chains for readability.
  • Always annotate return types as Promise<T>.
  • Use Promise.all() for independent concurrent operations.
  • Use Promise.allSettled() when failures should not abort sibling operations.
  • Never use new Promise() when an async function suffices (avoid the explicit-construction

antipattern).

  • Avoid async void functions — they cannot be await-ed and swallow errors.

Exception: event handlers where the framework requires void.

  • Prefer for...of with await for sequential async iteration, not forEach.

12. Comments & Documentation

/**
 * Calculate the compound interest for a principal amount.
 *
 * @param principal - The initial amount of money.
 * @param rate - The annual interest rate (decimal, e.g. 0.05 for 5%).
 * @param times - Number of times interest is compounded per year.
 * @param years - Number of years the money is invested.
 * @returns The total amount after compound interest.
 *
 * @example
 * ```typescript
 * const total = compoundInterest(1000, 0.05, 12, 10);
 * // total ≈ 1647.01
 * ```
 */
function compoundInterest(
  principal: number,
  rate: number,
  times: number,
  years: number,
): number {
  return principal * Math.pow(1 + rate / times, times * years);
}

Rules

  • Use TSDoc (/** */) for all public APIs, exported functions, classes, interfaces, and types.
  • Include @param, @returns, @throws, and @example tags where applicable.
  • Do NOT comment obvious code. The code should be self-documenting.
  • Use // TODO: with a ticket number for planned improvements.
  • Use // FIXME: for known issues that need resolution.
  • Use // HACK: for workarounds that should be revisited.
  • Never leave commented-out code in the main branch.
  • Place file-level comments at the top if the module's purpose is not obvious from its name.
  • Keep comments up-to-date with code changes.

13. Formatting & Style

General

  • Indentation: 2 spaces (no tabs).
  • Semicolons: Required at the end of every statement.
  • Quotes: Single quotes (') for strings; backticks (` ``) for template literals.
  • Trailing commas: Always use in multi-line constructs (arrays, objects, parameters, generics).
  • Max line length: 100 characters (soft limit), 120 characters (hard limit).
  • Braces: Required for all control structures, even single-line bodies.
  • Blank lines: One blank line between top-level declarations; no multiple consecutive blank lines.

Specific Patterns

// ✅ Good — braces always, even for single-line if
if (isValid) {
  process();
}

// ❌ Bad
if (isValid) process();

// ✅ Good — trailing comma
const config = {
  host: 'localhost',
  port: 3000,
  debug: true,
};

// ✅ Good — consistent object shorthand
const name = 'Alice';
const user = { name, age: 30 };

Tooling

  • Use Prettier for auto-formatting with the following baseline config:
  {
    "semi": true,
    "singleQuote": true,
    "trailingComma": "all",
    "printWidth": 100,
    "tabWidth": 2,
    "arrowParens": "always"
  }
  • Use ESLint with @typescript-eslint/eslint-plugin and

@typescript-eslint/parser for linting.


14. Null & Undefined Handling

// ✅ Good — optional chaining
const city = user?.address?.city;

// ✅ Good — nullish coalescing
const displayName = user.nickname ?? user.name ?? 'Anonymous';

// ✅ Good — explicit null checks for critical paths
function getUser(id: string): User {
  const user = repository.findById(id);
  if (user === undefined) {
    throw new AppError(`User not found: ${id}`, 'USER_NOT_FOUND', 404);
  }
  return user;
}

Rules

  • Enable strictNullChecks (included in strict mode).
  • Prefer undefined over null as the "absence of value" indicator, unless interacting with

external APIs that use null.

  • Use optional chaining (?.) and nullish coalescing (??) instead of manual checks.
  • Do NOT use non-null assertion (!) unless you can prove the value is always defined (add a

comment explaining why).

  • Prefer the satisfies operator (TS 5.0+) to validate types without widening.

15. Type Assertions & Guards

// ✅ Good — type guard function
function isUser(value: unknown): value is User {
  return (
    typeof value === 'object' &&
    value !== null &&
    'id' in value &&
    'name' in value
  );
}

// ✅ Good — discriminated union
interface Success<T> {
  kind: 'success';
  data: T;
}
interface Failure {
  kind: 'failure';
  error: Error;
}
type Result<T> = Success<T> | Failure;

function handleResult<T>(result: Result<T>): T {
  switch (result.kind) {
    case 'success':
      return result.data;
    case 'failure':
      throw result.error;
  }
}

Rules

  • Prefer type guards (is keyword) over type assertions (as).
  • Use as const for literal narrowing, not as SpecificType.
  • Use discriminated unions with a kind / type field for state machines and result types.
  • Avoid as unknown as T double assertions — they are almost always a design smell.
  • When assertions are necessary, add a comment justifying them.
  • Use satisfies for type validation without assertion:
  const palette = {
    red: [255, 0, 0],
    green: '#00ff00',
  } satisfies Record<string, string | number[]>;

16. React & JSX (when applicable)

// ✅ Good — functional component with explicit props type
interface UserCardProps {
  readonly user: User;
  readonly onSelect?: (userId: string) => void;
}

export function UserCard({ user, onSelect }: UserCardProps): React.ReactElement {
  const handleClick = useCallback(() => {
    onSelect?.(user.id);
  }, [onSelect, user.id]);

  return (
    <div className="user-card" onClick={handleClick} role="button" tabIndex={0}>
      <h3>{user.name}</h3>
      <p>{user.email}</p>
    </div>
  );
}

Rules

  • Use function declarations or named function expressions for components (not anonymous).
  • Define props as an interface (e.g., UserCardProps), not inline.
  • Mark all props as readonly.
  • Do NOT use React.FC — it is discouraged since React 18.
  • Use React.ReactElement or React.ReactNode as return type annotation.
  • Colocate styles, tests, and types with the component when practical.
  • Prefer controlled components over uncontrolled.
  • Memoize expensive computations with useMemo, stable callbacks with useCallback.
  • Extract custom hooks when logic is reused across components.
  • Component file structure:

1. Imports 2. Types / Interfaces 3. Constants 4. Component function 5. Helper functions (private to the module)


17. Testing Conventions

// ✅ Good — descriptive test structure
describe('UserService', () => {
  describe('findById', () => {
    it('should return the user when the id exists', async () => {
      const user = await service.findById('user-1');
      expect(user).toEqual(expect.objectContaining({ id: 'user-1' }));
    });

    it('should return undefined when the id does not exist', async () => {
      const user = await service.findById('non-existent');
      expect(user).toBeUndefined();
    });
  });
});

Rules

  • Test files are colocated or in a __tests__ directory.
  • Name test files *.test.ts or *.spec.ts.
  • Follow the Arrange → Act → Assert pattern.
  • One assertion concept per test (multiple expect calls are okay if they test one logical

assertion).

  • Use descriptive test names that read like a sentence.
  • Mock external dependencies; do NOT mock the module under test.
  • Prefer dependency injection to make code testable.
  • Aim for high test coverage on business logic; don't chase 100% on boilerplate.
  • Use jest.fn() or equivalent for spies/mocks; type them properly:
  const mockFetch = jest.fn<Promise<User>, [string]>();

18. Tooling & Configuration

Recommended tsconfig.json (Baseline)

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "NodeNext",
    "moduleResolution": "NodeNext",
    "lib": ["ES2022"],
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true
  }
}

Recommended ESLint Rules

RuleSetting
@typescript-eslint/no-explicit-anyerror
@typescript-eslint/explicit-function-return-typewarn (for exported functions)
@typescript-eslint/no-unused-varserror
@typescript-eslint/consistent-type-importserror
@typescript-eslint/no-non-null-assertionwarn
@typescript-eslint/prefer-nullish-coalescingerror
@typescript-eslint/prefer-optional-chainerror
@typescript-eslint/strict-boolean-expressionswarn
@typescript-eslint/naming-conventionerror (configured per construct)

Usage

Natural Language Activation

Simply mention TypeScript in your conversation — the skill activates automatically.

Example prompts:

PromptSkill Response
"Write a TypeScript function to merge two objects deeply"Generates a fully typed, standards-compliant deepMerge<T, U>() function following all rules above.
"Review my TypeScript code for style issues"Analyses the provided code against this guide and suggests improvements.
"Convert this JavaScript to TypeScript"Converts code, adds strict types, interfaces, and follows all naming / formatting conventions.
"What's the TypeScript best practice for error handling?"Explains the Result pattern, custom error classes, and typed catch blocks per §10.
"Create a TypeScript React component for a data table"Generates a well-typed functional component following §16 React rules with proper props interface.
"Set up a new TypeScript project"Provides tsconfig.json, ESLint config, Prettier config, and project structure following §18.

Inline Rule References

You can ask about any specific section:

  • *"Explain TypeScript naming conventions"* → References §2
  • *"How should I handle null in TypeScript?"* → References §14
  • *"Show me TypeScript generic best practices"* → References §9

平台分布

OpenClaw

91.08%
按下载量换算43,158

安全审计

VirusTotal

通过

ClawScan

通过

Static analysis

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills