我已经安装了@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'.
答案 0 :(得分:4)
Angular从打字稿配置文件中基于compilerOptions.types
和compilerOptions.typeRoots
的值导入类型。
TS compilerOptions docs reference
默认情况下,使用angular cli创建的Angular项目将具有两个打字稿配置文件。
tsconfig.json
在项目的根目录tsconfig.app.json
目录中的/src
如果types
和typeRoots
都未定义角度,则将从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-v3
和tsconfig.app.json
中的输入
stripe-v3
添加到types
。...
"compilerOptions": {
...
"types": ['stripe-v3']
}
如果添加,则必须将所有将来的类型添加到此数组中。
相反,如果您从types
中删除compilerOptions
,angular会自动导入所有将来的输入。
还要确保还要检查types
中的typeRoots
和tsconfig.js
。
typeRoots
将具有相对路径作为数组,并且此处也适用相同的逻辑。
答案 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'
此解决方案由bjornharvold在this thread中发布。