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

时间:2018-11-07 22:53:45

标签: angular typescript angular7

这是Angular应用程序的问题,但我不认为这是特定于角度的问题。

我正在使用Angular 7应用,正在使用通过前端的脚本标签从其他来源(条带,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的情况。我现在认为这可能与角度编译过程有关。

2 个答案:

答案 0 :(得分:0)

我过去也遇到过同样的问题,而且我发现如果不导入实际模块,就无法使用import来导入类型定义文件。

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

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

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

然后,您可以使用导入的对象而不会破坏类型安全性。

答案 1 :(得分:0)

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