Javascript 在函数中使用动态导入时,如何在全局变量中指定类型信息?
我的简化服务器代码如下所示 server.ts 从谷歌导入谷歌; const androidPublisher=google.androidpublisherv3; 应用程序。使用'something',functionreq,res,n{ ... } …其他几十种方法中只有一种使用androidPublisher 我正在导入googleapis库以设置androidpublisher变量。然而,这个googleapis库很大,完全导入文件需要400ms~700ms,而导入其他库文件需要10ms~30ms 因为我的环境是无服务器体系结构firebase函数,而且100个请求中大约有1个需要androidPublisher,所以我想在必要时利用动态导入导入googleapis。否则,上述设置实际上会为每个启动新的无服务器实例的请求增加400ms/700ms延迟,即使不需要androidPublisher 所以我做了如下改变 server.ts 例如:任何; 异步函数getAndroidPublisher{ const googleapis=等待导入googleapis; 如果androidPublisherInstance==未定义{ const ap=googleapis.google.androidpublisherv3; androidPublisherInstance=ap; } 返回androidPublisherInstance; } …其中一个方法使用getAndroidPublisher获取androidPublisher实例 在上面的设置中,我使用全局变量和助手函数仅在需要时初始化androidPublisher。当首次需要androidPublisher时,这会按预期工作,并增加400ms~700ms的延迟。然而,我最终得到的androidPublisherInstance类型为any。我无法正确定义类型,因为类型定义在googleapis中可用,并且位于getAndroidPublisher函数中 因此,当我使用androidPublisherInstance时,我失去了使用typescript的所有好处,不得不在使用方法/属性时玩猜谜游戏 我想我必须使用全局变量,因为我不想在函数调用getAndroidPublisher时多次初始化androidPublisherJavascript 在函数中使用动态导入时,如何在全局变量中指定类型信息?,javascript,typescript,Javascript,Typescript,我的简化服务器代码如下所示 server.ts 从谷歌导入谷歌; const androidPublisher=google.androidpublisherv3; 应用程序。使用'something',functionreq,res,n{ ... } …其他几十种方法中只有一种使用androidPublisher 我正在导入googleapis库以设置androidpublisher变量。然而,这个googleapis库很大,完全导入文件需要400ms~700ms,而导入其他库文件需要10ms
我错过什么了吗?有没有一种方法可以使用动态导入&让客户端只初始化一次而不需要使用全局变量?您可以只导入类型。只要您仅在类型定义中使用它,而不是在值表达式中使用,编译的JavaScript将永远不会加载模块:
import { androidpublisher_v3 } from "googleapis";
let androidpublisher: androidpublisher_v3 | undefined;
或者,为了确保您不会意外地将其引用到错误的位置,请仅使用:
应该是什么类型?如果我要导入的另一个类型如下所示。。。getClient:承诺;这是否意味着我必须查找、查找和导入Compute、JWT、UserRefreshClient的所有3个类型定义?@user482594或者您只需找到getClient方法所属的类型,并直接从中引用它,而不是重新创建方法签名。Hm。。好的,我试试看。谢谢
let androidpublisher: import("googleapis").androidpublisher_v3 | undefined;