В TypeScript наиболее распространенным способом передачи данных между контроллерами и сервисами является использование интерфейсов и классов. Класс сервиса может содержать методы для получения и сохранения данных, а интерфейс может определять структуру этих данных.
Что касается обращения к базе данных с использованием ORM Prisma, наиболее эффективным способом является использование асинхронных функций. В async/await синтаксисе код будет выглядеть более чисто и удобно читаемо, чем при использовании промисов. Например:
```typescript
// app.service.ts
import { PrismaClient } from '@prisma/client';
export class UserService {
private prisma = new PrismaClient();
async getUser(id: number) {
return await this.prisma.user.findUnique({ where: { id } });
}
async createUser(data: any) {
return await this.prisma.user.create({ data });
}
}
// app.controller.ts
import { UserService } from './user.service';
export class UserController {
private userService = new UserService();
async getUser(id: number) {
return await this.userService.getUser(id);
}
async createUser(data: any) {
return await this.userService.createUser(data);
}
}
```
Таким образом, использование асинхронных функций в TypeScript позволит упростить и улучшить читаемость кода при работе с базой данных через ORM Prisma.