typescript NestJs类型错误-类型“undefined”的参数不可分配给类型“string”的参数|符号'

yquaqz18  于 2023-04-22  发布在  TypeScript
关注(0)|答案(1)|浏览(451)

当我在NestJs中使用InjectRepository装饰器时,突然得到一个类型错误。这个错误在每个服务中都发生。

constructor(
    private userRepository: UserRepository,

    @InjectRepository(Workout) <--- Error
    private workoutRepository: Repository<Workout>,
  ) {}
{
  "compilerOptions": {
    "module": "CommonJS",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": true,
    "noImplicitAny": true,
    "strictBindCallApply": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "resolveJsonModule": true
  }
}

我得到以下错误:作为表达式调用时,无法解析参数装饰器的签名。“undefined”类型的参数无法分配给“string”类型的参数|symbol'.ts(1239)
我真的不知道为什么会出现这种情况。

bttbmeg0

bttbmeg01#

我在使用@Inject(forwardRef(() => Class))时遇到了这个lint错误。
它可以通过将@nestjs/common更新为v9.3.0来解决。
显然,这是TypeScript v5引入的一个问题。“[它]对装饰器类型检查引入了一些收紧。”1
Inject如何工作:

export declare const Inject:
  (entity: Function) =>
    (target: object, key: string | symbol, index?: number) => void;

export class Foo {}

export class C {
  constructor(@Inject(Foo) x: any) {}
}

如您所见,Inject需要第二个参数,该参数可以是symbolstring
NestJS v9.3.0在这个合并的PR下解决了这个问题:Constructor parameter decorators should allow undefined as the type of key #10959

相关问题