Изменить глобальный с интерфейсом, который может или не может быть там - PullRequest
0 голосов
/ 02 марта 2019

Я разделяю некоторый код между браузером и узлом, и я хотел бы использовать performance.now() вместо Date.now(), если доступно.К сожалению, в узле performance недоступен, и машинопись дает мне ошибку.Я мог бы добавить всю библиотеку dom, но она включает в себя все, чего я хотел бы избежать, потому что это, безусловно, в конечном итоге маскирует реальные ошибки.Итак, как я могу изменить глобальное пространство имен, чтобы сказать: «эй, есть это имя performance, которое может существовать или не существовать»

Для чего бы это ни стоило, это строка, которую я пытаюсь получитьдля чистой компиляции в узле и браузере:

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

, и вот ошибка, которую я получаю:

ошибка TS2304: не удается найти имя 'performance'.

1 Ответ

0 голосов
/ 02 марта 2019

Значение, возвращаемое typeof, представляет собой строку 'undefined', НЕ значение undefined.Таким образом, ваше сравнение должно быть:

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

С MDN :

Оператор typeof возвращает строку, указывающую тип неоцененного операнда.

...