请教大家一个 Nodejs 中 typescript 前后端开发(react+nestjs),共用 interface 的问题

发布于 1周前 作者 ionicwang 来自 nodejs/Nestjs

请教大家一个 Nodejs 中 typescript 前后端开发(react+nestjs),共用 interface 的问题

小白最近研究了下 nestjs 的 crud ,输入通过 class-validator 装饰器标注的 dto ,输出是直接透传 typeorm crud 返回的值,全程没有用到过 ts interface ,这种情况如果需要同步开发一个 ts-react 前端,该怎么在 service 文件夹定义 interface 呢,总不能手写一个吧

想到的办法: nest cli 的 swagger plugin ,可以直接生成接口数据,然后前端再通过 swagger-typescript-api 转成 interface ,但似乎完全没有发挥 ts 全栈开发优势啊。


6 回复

可以先定义好接口,比如 openapi 这套,然后定义文件生成 interface


dto 不也是个类型吗, 能不能直接拿来用

you 相关的库的的,在 npm 找一下。他的原理是用 entity 来生产相关的 dto

这个怎么生成,有什么插件或者工具么?

有终端工具的,你搜下,一大堆,选个合适的就行

在 Node.js 中使用 TypeScript 进行前后端开发(React + NestJS),共用 interface 是一个常见的需求,这有助于确保前后端数据结构的一致性。以下是如何实现这一点的简要指南:

  1. 创建共享目录: 在你的项目根目录下创建一个 shared 目录,用于存放共用的 TypeScript 接口文件。

    mkdir shared
    touch shared/interfaces.ts
    
  2. 定义接口: 在 shared/interfaces.ts 中定义你的接口。

    // shared/interfaces.ts
    export interface User {
        id: string;
        name: string;
        email: string;
    }
    
  3. 在前端使用接口: 在 React 项目中,你可以通过相对路径或者配置 TypeScript 路径别名来引用这个接口。

    // React component
    import { User } from '../path/to/shared/interfaces';
    
    const user: User = { id: '1', name: 'John Doe', email: 'john@example.com' };
    
  4. 在后端使用接口: 在 NestJS 项目中,同样可以引用这个接口。

    // NestJS service
    import { Injectable } from '[@nestjs](/user/nestjs)/common';
    import { User } from '../../path/to/shared/interfaces';
    
    [@Injectable](/user/Injectable)()
    export class UserService {
        private readonly users: User[] = [];
    
        getUserById(id: string): User {
            return this.users.find(user => user.id === id);
        }
    }
    

通过这种方式,你可以确保前后端使用相同的接口定义,从而减少因数据结构不一致导致的错误。

回到顶部