2017-04-16 66 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我添加了一些額外的信息,你可能會發現,如果你需要的有用寫圖書館或遇到衝突。 –