请帮我解决以下问题。我创建了默认节点。使用Visual Studio nodejs工具和express的js应用程序,现在我尝试调用在node中声明的setTimeout函数。d、 ts.代码如下:
var timer: NodeTimer;
timer = setTimeout(somecallback, 1000);
但是代码没有编译,表示无法将“Number”转换为“NodeTimer”
据我所知,问题是它需要标准的setTimeout函数,而不是从节点获取函数。d、 ts。
我尝试指定对节点的引用。d、 带<代码>\\\
如果您遇到超时问题,例如无法将“Number”转换为“NodeTimer”或无法将“Number”转换为“NodeJS”。计时器“”或“”无法将“Number”转换为“NodeJS”。超时“”或类型“Timeout”不可分配给类型“number”当尝试在窗口和节点中使用它时,您可以对窗口和节点使用这种类型安全解决方案:
const timer: ReturnType<typeof setTimeout> = setTimeout(() => null, 1000);
clearTimeout(timer);
最简单的强制修复:
var timer: NodeTimer;
timer = <any>setTimeout(somecallback, 1000);
只是为了好玩
我根据当前节点定义(https://github.com/borisyankov/DefinitelyTyped/blob/master/node/node.d.ts#L22)创建了一个小样本,它在打字稿游乐场中运行良好
interface NodeTimer{
ref() : void;
unref() : void;
}
declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeTimer;
var timer: NodeTimer;
timer = setTimeout(()=>{}, 1000);
我不知道为什么你会有冲突,而我没有。仅供参考,冲突的setTimeout
在lib.d.ts
中定义,但这也包含在TypeScript游乐场中,不会引起任何戏剧性事件。
我怀疑这是由TS 0.9.5中引入的更改打破的,该更改在更改日志中描述为:
过载解决规则简化
描述:过载解析现在遵循一种更简单的算法。当多个重载适合一个给定的调用时,我们选择第一个合适的,而不是试图找到“最佳匹配”。
这意味着带有重载的代码现在应该手动从最紧密/更具体的重载排序到最松散。
可用的两种重载如下:
// in lib.d.ts
declare function setTimeout(handler: any, timeout?: any, ...args: any[]): number;
// in node.d.ts
declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeTimer;
显然,第一个重载总是与第二个重载可以匹配的所有内容相匹配,因此只要它是第一个重载,就始终是首选重载。
在有两个的情况下。d、 正如这里所示,文件的顺序定义了它们重载的相对顺序。通常情况下,lib。d、 ts总是第一位的,所以它得到了优先权。但是,如果手动引用它,请确保引用位于节点之后。d、 然后后者将优先,您将得到正确的重载。
从命令行执行此操作很容易-只需指定。d、 ts文件以所需的顺序显式显示。对于VS项目,您可以对_引用执行相同的操作。ts,像这样:
/// <reference path="Scripts/typings/node/node.d.ts" />
/// <reference path="C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\lib.d.ts" />
为了避免像这样硬编码绝对路径,您可能希望在脚本/类型/节点中制作项目中lib.d.ts的本地副本,以及node.d.ts.
您可能还想加入TypeScript论坛上关于此更改的讨论线程,并与TS团队分享您的经验。
我必须连接AWS中的redis群集。任何人都可以指导如何使用ioredis和node js连接到redis集群吗。将有一个主人和三个奴隶。提前感谢。
我是 D3 的新手。因此,我正在尝试呈现一个图形,其中两个或多个孩子可以具有相同的父级。我想知道如何使链接再次定向到同一节点?我有断开的链接.. 任何帮助都是巨大的。 这是我的代码...
我有一个Vuejs应用程序,我试图添加谷歌认证。我使用这个插件https://www.npmjs.com/package/vue-google-oauth2在前端生成授权代码,然后将其发送到我的后端,以便它可以获得用户凭据。 以下是前端的代码: 在此之前,我成功地获取了授权代码,并将其发送到使用node编写的后端。js基于官方谷歌文档。https://github.com/googleapis/g
问题内容: 以下代码使我在节点js中出现异常:“需要删除或更新” 由于我指定了更新操作,因此无法解决问题。 问题答案: 节点驱动程序中的语法与外壳程序中的语法不同,这是您使用的语法。 有一个单独的功能
我有两个表有下面的模式,我想从用户表中获取用户名和密码,从信息表中获取全名。 var infoSchema=mongoose.Schema({khatam_id:String,user_id:String,fullname:String,}); var usersSchema=mongoose.Schema({user\u id:String,username:String,password:St
我试图在文件如下示例:如何为Firebase构建云函数,以便从多个文件部署多个函数?。 特别是,我有一个: 现在在index.ts我可以导入并附加一个用户身份验证侦听器,以便在创建新用户时触发,即: 然而,据我所知,只有实际上按预期工作,并且导出。userEvents似乎不会在创建新用户时触发。 ===================================================