【发布时间】:2019-05-23 06:26:05
【问题描述】:
我正在使用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 中的设置的内容,但这对我来说不是一个选项,而且这看起来确实应该是一开始就可以实现的。
【问题讨论】:
标签: typescript typescript-declarations