2017-04-16 63 views
3

我做了一些扩展到日期原型,如:离子2种2种全球导入扩展方法

interface Date { 
    YearsFromToday(): number; 
} 

Date.prototype.YearsFromToday = function(): number { 
    // implementation 
} 

我使用ionic2教程--v2模板,这是一个相当标准的布局 - 应用.html,app.ts,app.module等。

我想知道是否有一种简单的方法可以在全球范围内声明。我不确定在项目中究竟该把它放在哪里?

回答

2

将你的猴子补丁码放在一个文件中。 你可以称它为猴子补丁date.ts,例如:

猴子补丁date.ts

interface Date { 
    YearsFromToday(): number; 
} 

Date.prototype.yearsFromToday = function(): number { 
    // implementation 
} 

,然后在main.ts或任何其导入您的输入模块:

main.ts

import './monkey-patch-date'; 

交替。如果你想明确地表明你正在做一些危险的事情,你可以将它作为一个模块来导出它的monkey-patcher。

猴子补丁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(); 

另一种选择,尤其适用于图书馆的作者是允许猴子补丁,但不需要它,同时仍然暴露功能。

下面是一个例子:

日期扩充/ index.ts

export function yearsFromToday(date: Date): number { 
    // implementation 
} 

日期扩充/猴patch.ts

import {yearsFromToday} from './index'; 

declare global { 
    interface Date { 
     yearsFromToday(): number; 
    } 
} 

Date.prototype.yearsFromToday = function() { 
    return yearsFromToday(this); 
} 

现在消费者可以通过运行

来猴子修补Date原型
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 
+0

谢谢,我会检查了这一点,当我回家 –

+0

@ johnny5我添加了一些额外的信息,你可能会发现,如果你需要的有用写图书馆或遇到冲突。 –