mcpField
T
typescript

typescript

github.com/dalestudy开发4415 次安装今天更新
代码仓库

关于 typescript

面向 TypeScript 开发者的实践指南,介绍类型定义、类型安全与常用编码模式,并附有模板和参考资料。

主要功能

  1. 01利用类型推断
  2. 02为函数声明返回类型
  3. 03使用 unknown 和类型守卫
  4. 04配置项目 tsconfig
  5. 05参考事件与工具类型模板

适用场景

  1. 01编写类型安全的函数
  2. 02处理未知类型的数据
  3. 03配置不同类型项目的 tsconfig
  4. 04排查 TypeScript 类型错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dalestudy/skills --skill typescript

安装后在 Claude Code 中输入/typescript确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
tsconfig.nextjs.json
tsconfig.node.json
tsconfig.react.json
types.events.ts
types.guards.ts
types.utils.ts

README 原文English

来自项目 README

README 暂无中文译文,以下为英文原文;中文介绍见上方。

TypeScript

TypeScript 핸드북 기반 타입 정의 및 베스트 프랙티스. 기본 문법·타입 조작·유틸리티 타입 상세는 references/ 및 Handbook 참고.

기본 원칙

1. 타입 추론 활용

불필요한 어노테이션 생략. 변경 시 이중 수정 부담 감소, 추론이 더 정확한 경우 많음.

// ❌
const name: string = "John";
const user: { name: string; age: number } = { name: "John", age: 30 };

// ✅
const name = "John";
const user = { name: "John", age: 30 };
2. 명시적 반환 타입

함수 계약 명확화, 반환 타입 오변경 방지. 공개 API·복잡한 로직에서 필수.

function calculateTotal(items: Item[]): number {
  return items.reduce((sum, item) => sum + item.price, 0);
}
async function fetchUser(id: string): Promise<User> {
  const res = await fetch(`/api/users/${id}`);
  return res.json();
}
3. any 사용 금지

타입 안전성·자동완성 무효화. unknown + 타입 가드 또는 구체 타입 사용.

// ❌
function process(data: any) {
  return data.value;
}

// ✅
function process(data: unknown): number {
  if (typeof data === "object" && data !== null && "value" in data)
    return (data as { value: number }).value;
  throw new Error("Invalid data");
}

함수 · 제네릭

  • 함수: 인자·반환 타입 명시. 오버로드 시 구현 시그니처는 유니온으로.
  • 제네릭: T, K extends keyof T 등 제약 명시. getProperty<T, K extends keyof T>(obj: T, key: K): T[K] 패턴 활용.

타입 가드

  • typeof, instanceof, in으로 분기 후 타입 좁히기
  • 복잡한 검사는 사용자 정의 가드 (value): value is T 사용

템플릿: assets/types.guards.ts

tsconfig

  • 프로젝트 성격에 맞는 tsconfig를 사용
  • 타입 안정성을 해치지 않는 선에서만 옵션을 조정
  • 앱/서버/라이브러리는 설정 파일을 분리
  • 타입 에러 회피 목적의 옵션 완화 금지

템플릿:

  • assets/tsconfig.nextjs.ts
  • assets/tsconfig.node.ts
  • assets/tsconfig.react.ts

이벤트 타입

  • DOM / React 이벤트는 내장 타입 사용
  • 커스텀 이벤트만 별도 타입 정의
  • 이벤트 재정의 금지

템플릿: assets/types.events.ts

유틸리티 타입

  • TypeScript 내장 유틸리티 타입은 그대로 사용
  • 커스텀 유틸리티 타입만 정의

템플릿: assets/types.utils.ts

실전 패턴

  • interface 우선: 객체 계약·확장은 interface, 유니온/인터섹션은 type. API 설명은 명사형으로 작성 (/** 비활성화 상태 */).
  • as const: 리터럴·객체 불변 보존. typeof obj[keyof typeof obj] 로 이넘처럼 활용.
  • 브랜드 타입: type UserId = string & { readonly brand: unique symbol } 로 동일 원시 타입 구분.
  • 타입 단언 최소화: as 대신 타입 가드.
  • 제네릭 제약: T extends object 등 명시.

타입 에러 해결

에러대응
Type 'X' is not assignable to type 'Y'타입 가드로 분기 후 할당
Property 'X' does not exist on type 'Y'타입 확장 또는 optional
Object is possibly 'null' or 'undefined'if (x == null) / ?. / ??
Argument of type 'X' is not assignable to parameter of type 'Y'제네릭 T[] 또는 오버로드
Type 'X' cannot be used as an index typekeyof typeof obj 사용

디버깅: 호버로 추론 확인, 가드·제네릭·유틸리티 타입으로 해결 후 as는 최후 수단.

참고

이 문서들은 규칙이 아니라 참고용, 판단 기준은 각 skill 문서를 우선

评论

支持 Markdown