打字稿未导入的代码的打字稿类型?

Typescript types for code that is not imported by typescript?

这是 Angular 应用的问题,但我认为这不是 angular 特有的问题。

我正在开发一个 Angular 7 应用程序,我正在使用一些库,这些库是通过前端的脚本标签从其他来源(Stripe、recaptcha、googletags 等)导入的.我将在这里使用 Stripe 作为示例,因为 Stripe 绝对要求客户端从 Stripe.js 导入前端库以实现 PCI 合规性,因此从源服务器端导入不是一个选项。

我已经从 DefinitelyTyped 安装了 Stripe 的类型。如果我在组件中添加 declare let Stripe: any; 并使用 Stripe ,它可以工作,但当然它不是类型安全的。如果我省略声明,VSCode 会发现类型很好,并且编辑器会捕获类型错误,但它不会编译,(error TS2304: Cannot find name 'Stripe'.) 可以推测,因为我没有 Stripe 的 import 语句.

有没有什么方法可以提示 TypeScript 它应该使用 DefinitelyTyped 中的类型来捕获类型错误,而无需导入 Stripe 库本身?

编辑:我收回我所说的不认为这是 Angular 具体的内容。我现在认为这可能与 angular 编译过程有关。

我过去也遇到过同样的问题,我也发现在不导入实际模块的情况下无法使用 import 导入类型定义文件。

所以,我所做的是,我 将类型定义文件(通常 index.d.ts)复制 到我的代码库中。

之后,您可以执行以下操作:

import {SomeType} from "sometype.d.ts"
declare let ObjectImportedFromHTMLScriptTag: SomeType;

然后,您可以在不破坏类型安全的情况下使用导入的对象。

我的问题的答案似乎在这里:@types/googlemaps/index.d.ts' is not a module 也就是说,我可以使用三重斜杠指令,或在根 typings.d.ts 文件中声明模块。