Token导航 LogoToken导航

Agent Skill · 研究检索

typescript-type-safety-expert(TypeScript type safety expert 搜索)

typescript-type-safety-expert 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

typescript-type-safety-expert 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证为 MIT,暂无第三方扫描结果,按安装量在研究检索类的 73,675 个 Skill 里排第 9,562。

总安装 14,012周安装 645GitHub Stars 公开资料未说明下载 7,635核验 2026-05-01

安装说明

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

安装方式

通过对话安装

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

请帮我安装这个 Agent Skill:typescript-type-safety-expert(TypeScript type safety expert 搜索)
来源仓库:https://github.com/krosebrook/source-of-truth-monorepo
仓库路径:skills/typescript-type-safety-expert
安装命令:
npx skills add krosebrook/source-of-truth-monorepo --skill "typescript-type-safety-expert"
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

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

AgentSkills.tonpx skills
npx skills add krosebrook/source-of-truth-monorepo --skill "typescript-type-safety-expert"

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

typescript-type-safety-expert 提供高级类型安全设计与泛型优化建议。适合复杂数据结构建模与函数式编程场景下的类型工程支持。

通过 npx skills add krosebrook/source-of-truth-monorepo --skill "typescript-type-safety-expert" 命令安装。需理解联合类型、条件类型等高阶特性,避免过度嵌套导致可读性下降。建议结合单元测试验证类型守卫与断言逻辑正确性。

来源仓库内路径:skills/typescript-type-safety-expert

上手步骤

4 步
  1. 1

    确认自己的宿主工具

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

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add krosebrook/source-of-truth-monorepo --skill "typescript-type-safe…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

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

  4. 4

    按最小权限试用

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

常见问题

6 条

typescript-type-safety-expert 怎么安装?

在终端执行 npx skills add krosebrook/source-of-truth-monorepo --skill "typescript-type-safety-expert"。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

typescript-type-safety-expert 支持哪些 AI 工具?

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

typescript-type-safety-expert 需要什么权限?

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

typescript-type-safety-expert 是免费的吗?

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

typescript-type-safety-expert 用的人多吗?

公开数据是累计安装 14,012 次,近一周安装 645 次,下载 7,635 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

typescript-type-safety-expert 安全吗?

没有查到第三方扫描结果,安全性无法从公开资料判断,安装前请自行审查源码、依赖和命令行为。

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

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 许可证明确为 MIT,商用和分发边界好判断。

先想清楚的地方

  • 没有第三方扫描结果,安全性只能靠自己读源码判断。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 要求有安全扫描结论才肯安装的团队。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

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

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
typescript-type-safety-expert

TypeScript type safety expert 搜索 · 本页

14,012—需要联网MIT未收录

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

SKILL.md 原文

TypeScript Type Safety Expert

Advanced TypeScript patterns for bulletproof type safety.

Advanced Type Patterns

Branded Types

// Prevent mixing incompatible types
type Brand<K, T> = K & { __brand: T };

type UserId = Brand<string, 'UserId'>;
type ProductId = Brand<string, 'ProductId'>;

const userId = 'user_123' as UserId;
const productId = 'prod_456' as ProductId;

function getUser(id: UserId) { /* ... */ }

getUser(userId);      // ✅ OK
getUser(productId);   // ❌ Type error!

Discriminated Unions

type Success<T> = { success: true; data: T };
type Error = { success: false; error: string };
type Result<T> = Success<T> | Error;

function handleResult<T>(result: Result<T>) {
  if (result.success) {
    // TypeScript knows result.data exists
    console.log(result.data);
  } else {
    // TypeScript knows result.error exists
    console.error(result.error);
  }
}

Template Literal Types

type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE';
type Route = `/${string}`;
type Endpoint = `${HttpMethod} ${Route}`;

const endpoint: Endpoint = 'GET /users';  // ✅
const invalid: Endpoint = 'FETCH /data'; // ❌ Type error

// Dynamic key generation
type EventName = `on${Capitalize<string>}`;
const onClick: EventName = 'onClick';  // ✅
const invalid: EventName = 'click';    // ❌

Recursive Types

type JSONValue =
  | string
  | number
  | boolean
  | null
  | JSONValue[]
  | { [key: string]: JSONValue };

const validJSON: JSONValue = {
  name: "Alice",
  age: 30,
  tags: ["developer", "typescript"],
  metadata: {
    created: "2024-01-01",
    nested: {
      deep: true
    }
  }
};

Utility Type Combinations

// Make all properties optional recursively
type DeepPartial<T> = {
  [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
};

// Make specific keys required
type RequireKeys<T, K extends keyof T> = T & Required<Pick<T, K>>;

// Exclude null and undefined
type NonNullableKeys<T> = {
  [P in keyof T]: NonNullable<T[P]>;
};

// Extract function parameters
type Params<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;

Type-Safe API Client

type API = {
  '/users': {
    GET: { response: User[] };
    POST: { body: UserCreate; response: User };
  };
  '/users/:id': {
    GET: { params: { id: string }; response: User };
    PUT: { params: { id: string }; body: UserUpdate; response: User };
    DELETE: { params: { id: string }; response: void };
  };
};

type ExtractParams<T extends string> =
  T extends `${infer _Start}:${infer Param}/${infer Rest}`
    ? { [K in Param | keyof ExtractParams<Rest>]: string }
    : T extends `${infer _}:${infer Param}`
    ? { [K in Param]: string }
    : {};

async function apiCall<
  Path extends keyof API,
  Method extends keyof API[Path]
>(
  method: Method,
  path: Path,
  options?: API[Path][Method] extends { body: infer B }
    ? { body: B; params?: ExtractParams<Path> }
    : { params?: ExtractParams<Path> }
): Promise<API[Path][Method] extends { response: infer R } ? R : never> {
  // Implementation
  return {} as any;
}

// Usage - fully type-safe!
const user = await apiCall('GET', '/users/:id', {
  params: { id: '123' }  // ✅ Required
});

const newUser = await apiCall('POST', '/users', {
  body: { email: 'test@test.com', name: 'Test' }  // ✅ Required
});

Builder Pattern with Type State

class QueryBuilder<T extends Record<string, any>, HasWhere = false> {
  private whereClause?: string;

  where<K extends keyof T>(key: K, value: T[K]): QueryBuilder<T, true> {
    this.whereClause = `${String(key)} = ${value}`;
    return this as any;
  }

  // execute() only available after where() is called
  execute(this: QueryBuilder<T, true>): Promise<T[]> {
    return Promise.resolve([]);
  }
}

const query = new QueryBuilder<User>();
query.execute();  // ❌ Type error - must call where() first
query.where('id', 123).execute();  // ✅ OK

Strict Event Emitter

type EventMap = {
  'user:created': { id: string; name: string };
  'user:deleted': { id: string };
  'data:update': { data: any[] };
};

class TypedEventEmitter<T extends Record<string, any>> {
  private listeners: {
    [K in keyof T]?: Array<(data: T[K]) => void>;
  } = {};

  on<K extends keyof T>(event: K, callback: (data: T[K]) => void) {
    if (!this.listeners[event]) {
      this.listeners[event] = [];
    }
    this.listeners[event]!.push(callback);
  }

  emit<K extends keyof T>(event: K, data: T[K]) {
    this.listeners[event]?.forEach(cb => cb(data));
  }
}

const emitter = new TypedEventEmitter<EventMap>();

emitter.on('user:created', (data) => {
  console.log(data.id, data.name);  // ✅ Fully typed
});

emitter.emit('user:created', { id: '1', name: 'Alice' });  // ✅ OK
emitter.emit('user:created', { wrong: 'data' });  // ❌ Type error

Zod Integration

import { z } from 'zod';

const UserSchema = z.object({
  id: z.string().uuid(),
  email: z.string().email(),
  age: z.number().min(0).max(150),
  role: z.enum(['admin', 'user', 'guest']),
  metadata: z.record(z.unknown()).optional(),
});

type User = z.infer<typeof UserSchema>;

// Runtime validation with compile-time types
function validateUser(data: unknown): User {
  return UserSchema.parse(data);
}

TSConfig Best Practices

{
  "compilerOptions": {
    "strict": true,
    "exactOptionalPropertyTypes": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitOverride": true,
    "noPropertyAccessFromIndexSignature": true,
    "noFallthroughCasesInSwitch": true,
    "allowUnusedLabels": false,
    "allowUnreachableCode": false,
    "forceConsistentCasingInFileNames": true,
    "skipLibCheck": true
  }
}

Quick Patterns

// Const assertions
const config = {
  apiUrl: 'https://api.example.com',
  timeout: 5000,
} as const;
// Type: { readonly apiUrl: "https://api.example.com"; readonly timeout: 5000 }

// Satisfies operator
const colors = {
  red: [255, 0, 0],
  green: [0, 255, 0],
} satisfies Record<string, [number, number, number]>;

// Index signatures with template literals
type HTTPHeaders = {
  [K in `x-${string}`]: string;
};

// Conditional types
type IsArray<T> = T extends any[] ? true : false;
type Test1 = IsArray<string[]>;  // true
type Test2 = IsArray<string>;    // false

When to Use: Advanced TypeScript features, eliminating runtime errors, type-safe APIs, complex type systems.

平台分布

Claude Code

72.88%
按下载量换算5,564

安全审计

暂无安全审计结果可展示。

权限和风险

需要联网

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

安装前确认

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

继续浏览同类 Skills