2016-08-23 65 views
4

延長下劃線我有下面的代碼片段與求和函數,延長下劃線如何使用打字稿2.0

//underscore.extension.ts  
import * as _ from "underscore" 

declare module "underscore" { 
    export interface UnderscoreStatic { 
     sum(items: number[]): number; 
    } 
} 

_.mixin({ 
    sum: items => { return _.reduce<number, number>(items, function (s, x) { return s + x; }, 0); } 
}); 

但是使用_。 總和()給我的「物權‘和’對類型不存在‘UnderscoreStatic’。

那麼,誰能告訴我這樣做的正確方法?

+0

我知道你要的底線,但lodash(這是下劃線的超集)可以延伸,就像在[本概述答案](http://stackoverflow.com/questions/34660265/importing-lodash-into-angular2-typescript-application)。 – Tholle

回答

0

用它查找這個多一點之後你也有全球性的增強,可以解決你的問題(https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation

import * as _ from "underscore" 

declare global { 
    interface UnderscoreStatic { 
     sum(items: number[]): number; 
    } 
} 

_.mixin({ 
    sum: items => { return _.reduce<number, number>(items, function (s, x) {  return s + x; }, 0); } 
}); 

因爲你的mixin強調必須至少運行一次,你必須包括/需要該修改的早期,但您可以使用下劃線包正常後,這已被混合。

+0

我知道這已經很老了,但我實際上並沒有能夠得到這個工作。即使在這個答案中描述的全球增強聲明之後,它仍然說我的新mixin不是UnderscoreStatic的一部分。 – dook

+0

Typescript一直在改變,所以他們可能改變了這一點。你可以嘗試擴展並導入你的新擴展?看下一個答案。 – Lostfields

0

打字稿需要聲明的定義,總和()不知道你有沒有試圖擴大下劃線爲一類,並聲明和作爲一個靜態方法

然後出口的新的擴展下劃線類在你的應用程序中使用

編輯;? 下劃線沒有一個構造函數,所以你必須ex往往接口和混入的更改並返回類似這樣的新界面:

import * as _ from 'underscore'; 

interface UnderscoreExtended extends UnderscoreStatic { 
    sum(items: number[]): number; 
} 

_.mixin({ 
    sum: items => { return _.reduce<number, number>(items, function (s, x) { return s + x; }, 0); } 
}); 

export { UnderscoreExtended } // as UnderscoreStatic } 

export default _ as UnderscoreExtended; 

在你的項目,你可以導入此擴展下劃線和正常

import _ from '<your file containing extended underscore>'; 

_.isNumber(
    _.sum([1, 2]) 
); 
+0

我實際上是在1.8中聲明的「擴展全局/模塊範圍」來擴展下劃線。我想我有一些誤解here.pseudo代碼非常感謝。 – sercan

+0

對不起,編輯我的職務並增加了一個可能的解決方案 – Lostfields

+0

的作品,但是這不正是我assumed.I奇蹟,要確保如果不能導入只是強調本身,而不是擴展一個使用下劃線的增強方法 – sercan