繁体   English   中英

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

[英]Typescript types for code that is not imported by typescript?

这是一个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特定的内容。 我现在认为这可能与角度编译过程有关。

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

所以,我所做的是,我 Type Definition文件(通常是index.d.ts复制到我的代码库中。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM