当NODE_ENV设置为生产时,Nestjs构建未按预期工作

2vuwiymt  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(212)

错误:类型“{}”上不存在属性“objectId”
复制步骤:
将NODE_ENV环境变量设置为'production'。构建NestJS应用程序。触发下面提到的代码段。代码段:

const mapObject = new Map()

const employee = mapObject.get("keyName");

if (!employee) {
  throw new ServerException({
  });
}
const objectId = employee.objectId;

预期行为:构建过程应该成功完成,没有任何错误,即使NODE_ENV环境变量设置为“production”。
实际行为:当NODE_ENV环境变量设置为'production'时,构建将引发以下错误:“类型“{}”上不存在属性“objectId”。”
其他信息:
在开发环境中不会出现此问题。尝试访问从“mapObject”Map检索的“employee”对象的“objectId”属性时出错。
节点版本:-18.16
包版本“@nestjs/common”:“^9.0.0”,“@nestjs/config”:“^2.2.0”,“@nestjs/core”:“^9.0.0”,“@nestjs/cli”:“^9.0.0”,

flvlnr44

flvlnr441#

你的问题出现了,因为当你从map中获取employee对象时,TypeScript无法推断出它的类型。TypeScript对对象属性访问是严格的,所以如果对象的类型没有明确定义,访问它的属性可能会导致错误。
您应该为员工类型定义一个接口:

interface Employee {
  objectId: string; // or whatever the type of objectId is
  // define other properties as needed
}

然后在从Map中获取员工时使用此接口:

const employee = mapObject.get("keyName") as Employee;

这告诉TypeScript employee是Employee类型,并且它有一个属性objectId。如果你不知道employee对象的确切形状,但你确定一些属性,你可以使用Partial:

const employee = mapObject.get("keyName") as Partial<Employee>;

请记住,在尝试访问objectId之前,要检查employee是否未定义,以防止运行时错误。

相关问题