我对日期原型做了一些扩展,比如:
interface Date {
YearsFromToday(): number;
}
Date.prototype.YearsFromToday = function (): number {
// implementation
}
我使用的是ionic2教程-v2模板,这是一个相当标准的布局- app.html、app.ts、app.module等等。
我在想,在全球范围内,是否有一种简单的方式来宣布这一点。我不知道在这个项目里该把这个放哪儿?
发布于 2017-04-17 06:41:31
把你的猴子补丁代码放到一个文件中。例如,您可以称它为monkey-patch-date.ts,:
monkey-patch-date.ts
interface Date {
YearsFromToday(): number;
}
Date.prototype.yearsFromToday = function (): number {
// implementation
}
然后将其导入到main.ts或您的输入模块中:
main.ts
import './monkey-patch-date';
轮流。你可以让它成为一个模块,导出它的猴子补丁程序,如果你想更明确地说你在做一些危险的事情。
monkey-patch-date.ts
declare global {
interface Date {
yearsFromToday(): number;
}
}
export default function () {
Date.prototype.yearsFromToday = function (): number {
// implementation
};
}
然后像进口一样
main.ts
import monkeyPatchDate from './monkey-patch-date';
monkeyPatchDate();
另一种选择,特别是对库作者有用的是,允许猴子修补,但不需要它,同时仍然公开该功能。
下面是一个示例:
date-augmentations/index.ts
export function yearsFromToday(date: Date): number {
// implementation
}
date-augmentations/monkey-patch.ts
import {yearsFromToday} from './index';
declare global {
interface Date {
yearsFromToday(): number;
}
}
Date.prototype.yearsFromToday = function() {
return yearsFromToday(this);
}
现在,使用者可以通过运行
import 'date-augmentations/monkey-patch';
可以通过导出访问该功能,而无需猴子修补任何内容。
import {yearsFromToday} from 'date-augmentations';
const date = new Date('12-12-2023');
const yft = yearsFromToday(date);
console.log(yft); // prints 6
https://stackoverflow.com/questions/43439317
复制相似问题