TypeScript - NestJs خطای نوع - آرگومان از نوع 'undefined' قابل اختصاص به پارامتری از نوع 'string | symbol' نیست
ناگهان وقتی از دکوراتور InjectRepository در NestJs استفاده میکنم، یک خطای نوع دریافت میکنم. این خطا در هر سرویس اتفاق میافتد.
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)
من واقعاً نمیدانم چرا این ظاهر میشود.
پاسخ شماره ۱
من این خطای lint را با استفاده از @Inject(forwardRef(() => Class)) دریافت کردهام.
میتوان این مشکل را با بهروزرسانی @nestjs/common به v9.3.0 حل کرد.
ظاهراً این یک مشکل است که توسط TypeScript نسخه ۵ ایجاد شده است. «[این] برخی محدودیتها را در بررسی نوع دکوریتورها معرفی میکند.»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 نیاز به یک آرگومان دوم دارد که یا یک symbol یا یک string است.
نسیتجیاس نسخه 9.3.0 این مشکل را تحت این درخواست ادغام شده حل کرده است: دکوراتورهای پارامتر سازنده باید اجازه دهند مقدار undefined به عنوان نوع کلید باشد #10959
