Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在函数中使用动态导入时,如何在全局变量中指定类型信息?_Javascript_Typescript - Fatal编程技术网

Javascript 在函数中使用动态导入时,如何在全局变量中指定类型信息?

Javascript 在函数中使用动态导入时,如何在全局变量中指定类型信息?,javascript,typescript,Javascript,Typescript,我的简化服务器代码如下所示 server.ts 从谷歌导入谷歌; const androidPublisher=google.androidpublisherv3; 应用程序。使用'something',functionreq,res,n{ ... } …其他几十种方法中只有一种使用androidPublisher 我正在导入googleapis库以设置androidpublisher变量。然而,这个googleapis库很大,完全导入文件需要400ms~700ms,而导入其他库文件需要10ms

我的简化服务器代码如下所示

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时多次初始化androidPublisher


我错过什么了吗?有没有一种方法可以使用动态导入&让客户端只初始化一次而不需要使用全局变量?

您可以只导入类型。只要您仅在类型定义中使用它,而不是在值表达式中使用,编译的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;