typescript - Angular 7 و Stripe خطا TS2304: نمیتوان نام 'Stripe' را پیدا کرد
من @types/stripe-v3 را نصب کردهام و فایل جاوااسکریپت Stripe را در یک تگ اسکریپت در index.html قرار دادهام. بهطور فرض، کامپایلر Angular باید همه فایلها را بهطور خودکار از ماژولهای نود @types شامل کند. با مطالعه در اینترنت و نگاه به @types/stripe-v3/index.d.ts، باید یک متغیر Globally به نام Stripe اعلام شده باشد اگر فایل توسط کامپایلر شامل شود. از index.d.ts
declare var Stripe: stripe.StripeStatic;
در فایل سرویس من کد زیر وجود دارد:
import { Injectable } from '@angular/core';
import { environment } from '../environments/environment';
@Injectable({
providedIn: 'root'
})
export class BetalingService {
stripe = Stripe(environment.stripeKey);
constructor() { }
}
در نتیجه، خطای زیر رخ میدهد:
error TS2304: Cannot find name 'Stripe'.
پاسخ شماره ۱
این مشکل با وارد کردن ارجاع به بسته @types/stripe-v3 در آرایه compilerOptions.types فایل tsconfig.app.json شما در دایرکتوری src پروژه انگولار شما حل میشود.
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"types": [
"stripe-v3"
]
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
این راهحل توسط bjornharvold در این موضوع ارسال شد.
پاسخ شماره ۲
Angular انواع را بر اساس مقادیر compilerOptions.types و compilerOptions.typeRoots از فایل تنظیمات TypeScript وارد میکند. مستندات TS compilerOptions
به طور پیشفرض، پروژههای Angular که با استفاده از Angular CLI ایجاد میشوند، دو فایل پیکربندی TypeScript خواهند داشت.
tsconfig.jsonدر ریشه پروژهtsconfig.app.jsonدر پوشه/src
اگر هر دو types و typeRoots تعریف نشده باشند، انگولار تمام تایپینگها را از node_modules/@types/* وارد خواهد کرد.
اما اگر هر یک از آنها مقدار داشته باشند، تنها نوعهای مشخص شده یا نوعهای موجود در مکان مشخص شده وارد خواهند شد. به عنوان مثال: types: ['stripe-v3'] یا typeRoots: ['/someDir']. بنابراین همه نوعهای دیگر نصب شده در node_modules/@types/* وارد نخواهند شد.
اگر یک آرایه خالی تنظیم شود، هیچ نوعی به طور خودکار از node_modules/@types وارد نخواهد شد. types: [] یا typeRoots: [].
به طور پیشفرض، compilerOptions.types در tsconfig.app.json یک آرایه خالی به عنوان مقدار خود خواهد داشت. این دلیل این است که چرا انگولار به طور خودکار تایپینگهای نصب شده از node_modules/@types/* را دریافت نمیکند.
برای رفع این مشکل: npm install @types/stripe-v3 تایپینگها و در tsconfig.app.json
- یا
stripe-v3را بهtypesاضافه کنید.
...
"compilerOptions": {
...
"types": ['stripe-v3']
}
- یا انواع را از compilerOptions حذف کنید
اگر اضافه کنید، باید تمام تایپهای آینده را به این آرایه اضافه کنید.
در عوض، اگر types را از compilerOptions حذف کنید، انگولار تمام تایپینگهای آینده را به صورت خودکار وارد خواهد کرد.
همچنین مطمئن شوید که types و typeRoots در tsconfig.js را هم بررسی کنید. typeRoots مسیرهای نسبی به صورت آرایه خواهد داشت و همان منطق در اینجا نیز اعمال میشود.
