为什么TypeScript是新的标准,以及在哪里寻找最佳代码?
\n\n如果你还在用JavaScript编写代码,并且还没有转向TypeScript,那你就是在浪费时间。说真的。TypeScript(或TS)不仅仅是JS的“超集”。它提供了严格的类型检查、自动补全、无需担心破坏一切的重构,当然还有开源代码,你可以(也应该)去学习。
\n\n在这篇文章中,我们不会教你如何安装TypeScript。相反,我们将前往GitHub,剖析7个最佳的仓库,它们不仅展示了优雅的解决方案,还能帮助你编写更干净、更安全、更具可扩展性的代码。每个项目都是一本用真实代码编写的教科书。
\n\n我们在仓库中寻找什么?
\n\n- \n
- 架构模式——如何构建一个一个月后你不想删除的项目。 \n
- 严格类型检查的示例——TS发挥100%作用的地方。 \n
- 实际价值——可以立即使用的库。 \n
开始吧!
\n\n1. NestJS——用于严肃应用的框架
\n\n\n\nNestJS可以说是TypeScript上最优雅的框架。它借鉴了Angular的思想(模块、装饰器、依赖注入),将服务端代码变成了艺术品。
\n\n为什么值得学习:
\n- \n
- 清晰的模块划分。 \n
- 内置支持GraphQL、WebSockets、RabbitMQ。 \n
- 文档——堪称典范。 \n
来自仓库的代码示例(控制器和服务):
\n\n// cats.controller.ts\nimport { Controller, Get, Post, Body } from '@nestjs/common';\nimport { CatsService } from './cats.service';\nimport { CreateCatDto } from './dto/create-cat.dto';\nimport { Cat } from './interfaces/cat.interface';\n\n@Controller('cats')\nexport class CatsController {\n constructor(private catsService: CatsService) {}\n\n @Post()\n async create(@Body() createCatDto: CreateCatDto) {\n this.catsService.create(createCatDto);\n }\n\n @Get()\n async findAll(): Promise<Cat[]> {\n return this.catsService.findAll();\n }\n}\n\n\n请注意装饰器@Controller、@Get以及严格的接口Cat。这不仅仅是代码——这是成千上万个项目构建的模板。
2. Prisma——不让人烦躁的ORM
\n\n\n\nPrisma是一个用于TypeScript和Node.js的现代ORM(对象关系映射)。它根据你的数据库模式自动生成类型。这意味着像“字段不存在”这样的错误会在编译阶段被捕获,而不是在运行时。
\n\n你能学到什么:“Schema-first”方法和自动类型生成。
\n\n文档中的示例:
\n\n// schema.prisma\nmodel User {\n id Int @id @default(autoincrement())\n email String @unique\n name String?\n posts Post[]\n}\n\nmodel Post {\n id Int @id @default(autoincrement())\n title String\n content String?\n author User @relation(fields: [authorId], references: [id])\n authorId Int\n}\n\n// usage.ts\nimport { PrismaClient } from '@prisma/client';\n\nconst prisma = new PrismaClient();\n\nasync function main() {\n const user = await prisma.user.create({\n data: {\n email: 'alice@prisma.io',\n name: 'Alice',\n posts: {\n create: { title: 'Hello World' },\n },\n },\n });\n console.log(user);\n}\n\n\nPrisma是TypeScript如何让数据处理变得安全且快速的完美示例。
\n\n