typescript - 属性 'X 在类型 Y 中缺失,但在类型 Z 类中是必需的
问题描述
我正在用nestjs 编写一个应用程序。我的项目中有一些类作为类型(dto)。最重要的是这些:
export class InvoiceDto<TExpenses = ExpensesDto, TIncomes = IncomeDto> {
@Prop() @IdValidator() id: string;
@Prop() @PositionValidator() position: number;
@Prop() @DateOfEventValidator() dateOfEvent: string;
@Prop() @IncomeValidator() income: TIncomes;
@Prop() @ExpensesValidator() expenses: TExpenses;
}
class GenericInvoice extends InvoiceDto<AddExpensesDto, AddIncomeDto> {}
export class AddInvoiceDto extends OmitType(GenericInvoice, [
'id',
'position',
] as const) {}
费用和收入是相似的,所以我将举一个例子:
export class ExpensesDto {
@ExpenseOtherValidator() other: number;
@ExpenseTotalValidator() total: number;
@ExpenseSumValidator() sum: number;
}
export class AddExpensesDto extends OmitType(ExpensesDto, ['sum'] as const) {}
问题是我只会在我的一项服务的后端在费用和收入中添加“总和”字段。所以我在上面做了类似这段代码的事情(顺便说一句,我不确定这段代码是否有意义)。但是在我尝试添加发票的服务中,做 DB(几乎在函数的末尾)我有这样的东西:
const newInvoiceRecord: InvoiceDto = {
id: nanoid(),
position,
income: { // error
sum: 0,
...income,
},
expenses: { // error
sum: 0,
...expenses,
},
...invoice,
};
错误是:“AddExpensesDto”类型中缺少“属性“总和”,但在“ExpensesDto”类型中是必需的。收入领域相同。那么这里发生了什么?问题出在哪里,为什么 typechecker 关心 AddExpensesDto 和 AddIncomeDto?
解决方案
推荐阅读
- javascript - Flex Box 未按预期运行
- reactjs - 使用空格:在 React with Mongo 中使用来自 API 的字符串的预行
- grails - 如何获取域值表单发布到控制器
- c++ - 模板(C++)中的参数值:可以在运行时指定吗?
- javascript - 使用 Mongodb 和 Node.js 进行布尔切换
- javascript - 在加载和 Ajax 加载的内容上运行 JS 代码
- python - 从python中的类动态创建对象
- python - 检查私有类方法调用顺序
- c# - 更新包含表中的行
- java - 使用swing将背景颜色设置为用户定义的图像的任何方式?