JavaScript/TypeScript开发 javascript-typescript

该技能用于使用JavaScript和TypeScript进行Web开发,涵盖前端开发(如React)、后端开发(如Node.js)以及全栈项目构建。关键词包括JavaScript、TypeScript、前端开发、后端开发、ES6+、Node.js、React、Web框架。

前端开发 0 次安装 0 次浏览 更新于 3/8/2026

名称: javascript-typescript 描述: JavaScript和TypeScript开发,使用ES6+、Node.js、React和现代Web框架。适用于前端、后端或全栈JavaScript/TypeScript项目。 来源: wshobson/agents 许可证: MIT

JavaScript/TypeScript 开发

TypeScript 配置

{
  "compilerOptions": {
    "target": "ES2022",
    "module": "ESNext",
    "moduleResolution": "bundler",
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitOverride": true,
    "skipLibCheck": true,
    "declaration": true,
    "outDir": "./dist"
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

类型模式

实用类型

// 选择特定属性
type UserPreview = Pick<User, 'id' | 'name'>;

// 省略属性
type CreateUser = Omit<User, 'id' | 'createdAt'>;

// 使所有属性可选
type PartialUser = Partial<User>;

// 使所有属性必需
type RequiredUser = Required<User>;

// 提取联合类型
type Status = 'pending' | 'active' | 'inactive';
type ActiveStatus = Extract<Status, 'active' | 'pending'>;

区分联合

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

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

泛型约束

interface HasId {
  id: string | number;
}

function findById<T extends HasId>(items: T[], id: T['id']): T | undefined {
  return items.find(item => item.id === id);
}

现代JavaScript

解构与展开

const { name, ...rest } = user;
const merged = { ...defaults, ...options };
const [first, ...others] = items;

可选链与空值合并

const city = user?.address?.city ?? 'Unknown';
const count = data?.items?.length ?? 0;

数组方法

const adults = users.filter(u => u.age >= 18);
const names = users.map(u => u.name);
const total = items.reduce((sum, item) => sum + item.price, 0);
const hasAdmin = users.some(u => u.role === 'admin');
const allActive = users.every(u => u.active);

React 模式

// 带子组件的属性
interface CardProps {
  title: string;
  children: React.ReactNode;
}

// 事件处理程序
interface ButtonProps {
  onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
}

// 自定义钩子
function useLocalStorage<T>(key: string, initial: T) {
  const [value, setValue] = useState<T>(() => {
    const stored = localStorage.getItem(key);
    return stored ? JSON.parse(stored) : initial;
  });

  useEffect(() => {
    localStorage.setItem(key, JSON.stringify(value));
  }, [key, value]);

  return [value, setValue] as const;
}

Node.js 模式

// ES 模块
import { readFile } from 'node:fs/promises';
import { join } from 'node:path';

// 错误处理
process.on('unhandledRejection', (reason) => {
  console.error('未处理的拒绝:', reason);
  process.exit(1);
});