使用可能存在或可能不存在的接口来修改全局

时间:2019-03-02 05:34:57

标签: javascript node.js typescript browser typescript-typings

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

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

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

这是我得到的错误:

  

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

1 个答案:

答案 0 :(得分:2)

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

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

来自MDN

  

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