我正在尝试停止使用TSD在通过全局变量使用许多库的项目中获取类型定义(如果这很重要,outFile
中使用tsconfig.json
选项)。特别是,它以这种方式使用Moment库。片刻提供its own type definitions作为NPM包的一部分。但是,这些定义不会在全局范围内声明任何内容。请注意,moment
既是类型moment.MomentStatic
的全局变量,也是类型命名空间。使用NPM包,我如何以这样的方式扩展全局范围:一切都开始工作,因为它现在使用从TSD获得的旧类型定义?也就是说,moment
应该在任何文件中全局可用,作为变量和类型命名空间。基本上,我想要的是这些方面:
import * as _moment from 'moment';
declare global {
const moment: _moment.MomentStatic;
import moment = _moment;
}
这不编译:
[ts] Imports are not permitted in module augmentations. Consider moving them to the enclosing external module.
[ts] Import declaration conflicts with local declaration of 'moment'
有解决方法吗?
答案 0 :(得分:2)
回答我自己的问题。最后,我找到了一种方法来增加使用全局和outFile
的旧式项目中的库类型。我们需要为每个库单独.d.ts
。例子:
将与globals / UMD的兼容性添加到Moment.js。为了与TypeScript 1.x保持兼容,Moment的类型定义不包括export as namespace
行。一个.d.ts
文件(名称为augment.moment.d.ts
)修复此问题:
import * as moment from 'moment';
export as namespace moment;
export = moment;
扩充AngularJS的类型定义。 augment.angular.d.ts
:
import * as angular from 'angular';
declare module 'angular' {
interface IRootScopeService {
$$destroyed: boolean;
}
}
export as namespace angular;
export as namespace ng;
export = angular;