我对 Date 原型(prototype)做了一些扩展,例如:
interface Date {
YearsFromToday(): number;
}
Date.prototype.YearsFromToday = function (): number {
// implementation
}
我正在使用 ionic2 教程 --v2 模板,这是一个非常标准的布局 - app.html、app.ts、app.module 等。
我想知道是否有一种简单的方法可以在全局范围内声明它。我不确定将它放在项目中的确切位置?
最佳答案
将您的猴子补丁代码放入一个文件中。 您可以将其称为 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-patcher 的模块。
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);
}
现在消费者可以通过运行猴子修补 Date 原型(prototype)
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
关于javascript - Ionic 2 Angular 2 全局导入扩展方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43439317/