declare interface Array<T> { select<T, TR>(this: T[], func: (item: T) => TR): TR[]; } Array.prototype["select"] = function <T, TR>(this: T[], func: (item: T) => TR): TR[] { var vs = new Array<TR>(); this.forEach((item) => vs.push(func(item))); return vs; };
個人理解,可能有錯誤
我主要用在單文件,沒有聲明模塊的項目中,其他的可能有區別
接口的declare關鍵字的意思是擴展原有的(或者說全局作用域中的?)接口,否則會覆蓋原有的接口聲明,該聲明要在文件開頭編寫
然后就是在原型中添加方法,我測試是typescript沒有相應的檢查,告訴你添加的方法與接口中聲明的不匹配,或許能在配置文件中開啟,我不太清楚