Я использую moment.js (в частности, moment-timezone
), который имеет интерфейс под названием Duration
.Duration.prototype.valueOf()
возвращает число, поэтому в JavaScript вызов
setInterval(myCallback, moment.duration(30, 'seconds'));
работает просто отлично.
Я хочу написать файл объявления TypeScript, который позволяет это.
global.d.ts
export {};
declare global {
function setTimeout(callback: (...args: any[]) => void, ms: Duration, ...args: any[]): NodeJS.Timeout;
function setInterval(callback: (...args: any[]) => void, ms: Duration, ...args: any[]): NodeJS.Timeout;
}
Когда я добавляю
import { Duration } from 'moment-timezone';
, он обрабатывает файл .d.ts как объявление модуля и поэтому не влияет на глобальное пространство имен.
Я думал переместить import
в область действия declare global
, но он все еще рассматривал Duration
как any
.
Я также пытался
/// <reference path="node_modules/@types/moment-timezone/index.d.ts" />
но это, похоже, ничего не делает.
Я видел несколько ответов, в которых упоминалось что-то о настройке в tsconfig.json, но это не вариант для меня, и это действительно похоже на то, чтодолжно быть просто возможно в первую очередь.