我正在努力升级一些旧的TypeScript代码以使用最新的编译器版本,而我在调用时遇到问题setTimeout.代码期望调用浏览器的setTimeout函数返回一个数字:
setTimeout(handler: (...args: any[]) => void, timeout: number): number;
但是,编译器正在将此解析为节点实现,它返回NodeJS.Timer:
setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer;
此代码不在节点中运行,但节点类型作为对其他内容的依赖(不确定是什么)而被拉入.
如何指示编译器选择setTimeout我想要的版本?
这是有问题的代码:
let n: number;
n = setTimeout(function () { /* snip */ }, 500);
Run Code Online (Sandbox Code Playgroud)
这会产生编译器错误:
TS2322:类型'定时器'不能分配给'数字'类型.
我一直在玩emacs lisp,我想编写一个小函数来进行正则表达式搜索和替换.我有一段时间让正则表达式正常工作,因为我没有意识到在编写lisp代码时需要对所有特殊字符进行双重转义(但在交互式使用query-replace-regexp时则不行!).
因此,例如,交互式使用query-replace-regexp即可使用
^\(.*\)[\t]-.*$
Run Code Online (Sandbox Code Playgroud)
但是在编写elisp代码时,你需要双重转义所有内容:
^\\(.*\\)[\t]-.*$
Run Code Online (Sandbox Code Playgroud)
我终于在Steve Yegge的文章中找到了对此的引用,但我想知道是否有人知道这是为什么?