首页 > 解决方案 > 使用可能存在或不存在的接口修改全局

问题描述

我在浏览器和节点之间共享一些代码,如果可用,我想使用performance.now()而不是。Date.now()不幸的是,在节点中,performance不可用,打字稿给我一个错误。我可以添加整个dom库,但这会引入所有内容,我想避免这种情况,因为它最终肯定会掩盖真正的错误。那么,我怎样才能修改全局命名空间说:“嘿,这个名字performance可能存在也可能不存在”

对于它的价值,这是我试图在节点和浏览器中干净编译的行:

const lastUpdate = typeof performance !== undefined ? performance.now() : Date.now();

这是我得到的错误:

错误 TS2304:找不到名称“性能”。

标签: javascriptnode.jstypescriptbrowsertypescript-typings

解决方案


返回的值typeof是一个字符串'undefined',而不是 的值undefined。所以你的比较应该是:

const lastUpdate = typeof performance !== 'undefined' ? performance.now() : Date.now();

来自MDN

typeof 运算符返回一个字符串,指示未计算的操作数的类型。


推荐阅读