Angular 7和Stripe错误TS2304:找不到名称“ Stripe”

时间:2019-02-18 18:33:56

标签: typescript angular-cli stripe-payments definitelytyped angular-cli-v7

我已经安装了@types/stripe-v3,并将Stripe的javascript文件包含在index.html的脚本标签中。假定Angular编译器应自动包含@types节点模块中的所有文件。如果编译器包含文件,那么在Internet上阅读并查看@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'.

2 个答案:

答案 0 :(得分:4)

Angular从打字稿配置文件中基于compilerOptions.typescompilerOptions.typeRoots的值导入类型。 TS compilerOptions docs reference

默认情况下,使用angular cli创建的Angular项目将具有两个打字稿配置文件。

  1. tsconfig.json在项目的根目录
  2. tsconfig.app.json目录中的/src

如果typestypeRoots都未定义角度,则将从node_modules/@types/*导入所有类型。

但是,如果其中任何一个具有任何值,则将仅导入指定的类型或来自指定位置的类型。例如:types: ['stripe-v3'] or typeRoots: ['/someDir']。 因此,不会导入node_modules/@types/*中的所有其他已安装类型。

如果设置了空数组,则不会自动从node_modules/@types导入任何类型。 types: [] or typeRoots: []

默认情况下,compilerOptions.types中的tsconfig.app.json的值将为空数组。这就是为什么angular无法自动从node_modules/@types/*获取安装的类型的原因。

要解决此问题:npm install @types/stripe-v3tsconfig.app.json中的输入

  1. stripe-v3添加到types
...
"compilerOptions": {
   ...
  "types": ['stripe-v3']
}
  1. 或从editorOptions中删除类型

如果添加,则必须将所有将来的类型添加到此数组中。

相反,如果您从types中删除compilerOptions,angular会自动导入所有将来的输入。

还要确保还要检查types中的typeRootstsconfig.jstypeRoots将具有相对路径作为数组,并且此处也适用相同的逻辑。

答案 1 :(得分:2)

此问题已解决,方法是在Angular项目的@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" ] } 包的引用。

FLASK_ENV='development'

此解决方案由bjornharvoldthis thread中发布。