15

@types/stripe-v3の script タグに Stripe の JavaScript ファイルをインストールしてインクルードしましたindex.html。おそらく、Angular コンパイラは @types ノード モジュールからすべてのファイルを自動的にインクルードする必要があります。ファイルがコンパイラによってインクルードされている場合、インターネットを読んで@types/stripe-v3/index.d.tsグローバルに宣言された var 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'.
4

2 に答える 2

8

Angularは、typescript 構成ファイルの 値compilerOptions.typesとそこからの値に基づいて型をインポートします。TS コンパイラ オプション ドキュメント リファレンスcompilerOptions.typeRoots

デフォルトでは、angular cli を使用して作成された Angular プロジェクトには、2 つの typescript 構成ファイルがあります。

  1. tsconfig.jsonプロジェクトのルートで
  2. tsconfig.app.json/srcディレクトリ内

typesとの両方typeRootsが定義されていない場合、 angular は からすべてのタイピングをインポートしnode_modules/@types/*ます。

ただし、それらのいずれかに値がある場合は、指定されたタイプまたは指定された場所のタイプのみがインポートされます。例: types: ['stripe-v3'] or typeRoots: ['/someDir']. そのため、インストールされている他のすべてのタイプはnode_modules/@types/*インポートされません。

空の配列が設定されている場合、 から自動的にインポートされるタイプはありませんnode_modules/@typestypes: [] or typeRoots: [].

デフォルトcompilerOptions.typestsconfig.app.jsonは、値として空の配列が含まれます。node_modules/@types/*これが、Angular がインストールされたタイピングを自動的に取得しない理由です。

これを修正するにはnpm install @types/stripe-v3:tsconfig.app.json

  1. に追加stripe-v3typesます。
...
"compilerOptions": {
   ...
  "types": ['stripe-v3']
}
  1. または、compilerOptions からタイプを削除します

追加する場合、今後のすべての型付けをこの配列に追加する必要があります。

types代わりに、角度から削除するcompilerOptionsと、将来のすべての入力が自動的にインポートされます。

また、必ずチェックインしてtypesください。 配列として相対パスがあり、同じロジックがここにも適用されます。typeRootstsconfig.jstypeRoots

于 2019-09-06T15:00:55.043 に答える