gpt4 book ai didi

node.js - 函数内的 TypeScript 全局声明

转载 作者:太空宇宙 更新时间:2023-11-04 01:51:45 25 4
gpt4 key购买 nike

有一个 Node.js 脚本,其中包含一个将在浏览器中而不是 Node.js 中计算的函数(字符串化并发送到客户端)。

它合理地触发 TypeScript 类型错误,因为函数体使用仅存在于浏览器上下文中的 undefined variable :

// Node context
evaluateInBrowser(() => {
// browser context
window.foo(); // cannot find name 'window'
localStorage.clear(); // cannot find name 'localStorage'
});

这是端到端框架(例如 Protractor)中的常见情况。 declare var window 不允许放入 TypeScript 中的函数中。而且我不希望将其放在 Node.js 上下文中,以避免意外使用浏览器全局变量。

我的目的是

  • 如果可能,请保持函数匿名,因为它作为 evaluateInBrowser 参数最具可读性

  • 将函数保留为函数,而不是字符串

  • 避免浏览器类型对 Node.js 全局上下文的污染(无 dom TS 库)

  • 避免浏览器类型污染 Node.js 模块上下文(不声明 var window)如果可能

  • 分别将 windowlocalStorage 键入为 WindowStorage,而不是 any 如果可能

有哪些选项可以解决此 TypeScript 问题?

最佳答案

解决方案是使用未使用的局部变量来欺骗类型检查:

  {
let localStorage: { clear(): void };
let window: { foo() };

// Node context
evaluateInBrowser(() => {
// browser context
window.foo();
localStorage.clear();
});
}

它们可以另外用 block 包装,以避免在 Node 上下文中意外使用或与此范围内的其他变量发生冲突。

关于node.js - 函数内的 TypeScript 全局声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49373459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com