我可以从我的库中导出对全局名称空间的修改吗?

时间:2019-01-03 23:43:39

标签: typescript

我想在lib的全局命名空间中的现有Typescript类型中添加一个方法,然后从lib中导出该方法以供其他项目使用。这可能吗?

这就是我所拥有的:

Promise.ts

Promise.prototype.catchExtension = function<T>(this : Promise<T>): Promise<T> {
    return Promise.prototype.catch.apply(this, [() => { /*do stuff*/ }]);
}

Promise.d.ts

declare global {
    interface Promise<T> {
        catchExtension(): Promise<T>;
    }
}
export { }

如何在链接到我的书架的另一个应用程序中使用它?我无法使用import { .... } from '@mylib',因为它是在没有名称的情况下导出的:export { }

2 个答案:

答案 0 :(得分:0)

尝试仅使用

import '@mylib'

它只会在与您要导入的模块不同的范围内“运行”文件,但这应该没问题,因为您正在修改全局范围。

答案 1 :(得分:0)

解决了一段时间后,我找到了解决方案。我会在这里发布它,以防其他人使用。

通过将声明和定义都放在.ts文件中,然后将文件(在任何地方..!)导入lib中,我的其他项目便能够尽快使用扩展方法它会从库中导入任何内容。

最终代码如下:

在lib项目中:

Promise.ts

BalanceOfPoints

lib.ts

Promise.prototype.catchExtension = function<T>(this : Promise<T>): Promise<T> {
    return Promise.prototype.catch.apply(this, [() => { /*do stuff*/ }]);
}

declare global {
    interface Promise<T> {
        catchExtension(): Promise<T>;
    }
}
export { }

在主应用中:

import './Promise'; // this can go in any file in the lib...
export { } from './Promise';
// The rest of the exports
export { Example } from './Example';