typescript - 使用单独的存储库在前端和后端之间共享类型
问题描述
我需要一些帮助。
我的项目分为 3 个存储库 - 后端、前端和具有通用类型和实用程序的存储库(以下简称 - 助手)。
前端具有以下访问服务器的代码:
export type SignInData = {
login: string;
password: string;
}
export class AuthService extends BaseService {
signIn(data: SignInData): Promise<TokenString> {
return this.post('sign-in', data);
}
}
在后端有处理此调用的代码:
import { IsNotEmpty } from 'class-validator';
export class SignInDto {
@IsNotEmpty()
login: string;
@IsNotEmpty()
password: string;
}
基本上我可以使用一种类型,我正在考虑将服务器类提取到帮助程序中,它会是这样的:
// helper
import { IsNotEmpty } from 'class-validator';
export class SignInDto {
@IsNotEmpty()
login: string;
@IsNotEmpty()
password: string;
}
// client
import { SignInDto } from 'helper';
export class AuthService extends BaseService {
signIn(data: SignInDto): Promise<TokenString> {
return this.post('sign-in', data);
}
}
new AuthService().signIn({ login: 'log', password: 'pass' })
// server
import { SignInDto } from 'helper';
// use inside controller
但是这样一来,服务器验证被提取到了助手中,从架构的角度来看,我并不喜欢。
这是另一种选择:
// helper
export interface ISignInDto {
login: string;
password: string;
}
// client
import { ISignInDto } from 'helper';
export class AuthService extends BaseService {
signIn(data: ISignInDto): Promise<TokenString> {
return this.post('sign-in', data);
}
}
new AuthService().signIn({ login: 'log', password: 'pass' });
// server
import { ISignInDto } from 'helper';
export class SignInDto implements ISignInDto {
@IsNotEmpty()
login: string;
@IsNotEmpty()
password: string;
remember: boolean; // here is no error, cuz class implements interface correctly
}
// use inside controller
但是这样一来,如果我想在服务器类中更改某些内容而忘记在帮助程序中进行更改,则会导致错误。
有任何想法吗?
具有不同存储库的后端和前端之间的共享类型
解决方案
推荐阅读
- odoo - 试图继承 hr.employee 但出现错误
- javascript - 每次页面加载时,如何在 javascript 中切换 1 个布尔值,而无需本地存储或 cookie?
- apache-kafka - 我可以将 KSQL 表从 AVRO 更改为 JSON 格式吗?
- java - 华为 P Smart 2019 手机中的虚拟陀螺仪?
- python - 我的布尔变量怎么不能出现语法错误?
- c# - File.Exists 返回 false,即使文件存在于文件夹中
- python - 如何搜索行以检查该行是否包含值并仅提取该特定列
- dotnetnuke - 在 DNN 中创建 Master-Child 站点,从主站点访问和继承内容到子站点
- java - 如何在服务层测试 Add 方法?
- gmail - G Suite Gmail:默认路由与路由