2016-03-07 76 views
2

我目前已經在項目中定義了以下接口打字稿 - 實現一個接口,但沒有實施的接口父母

interface foo { 
    fooProperty: number; 
    fooFunction(): void; 
} 

interface bar extends foo { 
    barProperty: string; 
    barFunction(): void; 
} 

現在我想這樣定義

class myBar implements bar { 
    public barProperty: string ="bar"; 
    public barFunction() { 
    // do dosmething 
    } 
} 

類不過,我不希望不得不實現foo的函數和屬性,因爲這些已經在接口定義的現有JS類中定義。

基本上我想要做的是創建一個打字稿類從第三方JS庫擴展,我有「d.ts」文件描述的實現,但不是在打字稿中它的源形成。

爲了在第三方庫中使用特定的函數,我必須創建一個自定義類,它們是從它們在JS中提供的類派生而來的,然後使用「prototype」重寫,但是我需要這樣做使用打字稿。

更新1

看來,人讀這是不是很讓我想要在這裏實現,所以讓我解釋多一點。

在我工作的,我們使用第三方JS LIB的項目,讓我們稱之爲「thirdLib.js」

在「thirdLib.js」有功能,爲了使用它,需要我向作爲「thirdLib.js」部分提供了一個JS樣式類,像這樣:

function myClass(){ 
    thirdlib.thirdclass.call(this); 
} 

thirdLib.utilities.extendclass(myClass, thirdLib.thirdClass); 

myClass.prototype.overriddenFunc = function(){ 
    // Do custom function here 
} 

的「extendClass」方法「thirdlib」 copys我從進入我的構造函數或派生類的構造函數所以我導致相信。

然後使用以後,在「thirdlib.js」 EG別處:

var myStuff = new thirdLib(); 
var theClass = new myClass(); 

myStuff.registerSomething(theClass); 
myStuff.doAThing(); 

在這裏我稱之爲「doAThing」,thirdLib.js具有與其註冊新的JS類的點,該類具有「thirdClass」中的所有原始功能,但添加了MY定製。

我所有用於「thirdLib.js」的是JavaScript代碼(Minified)和一組Typescript定義文件(我自己寫的,因爲沒有任何地方提供了lib),我需要能夠使用正常的Typescript功能來創建「myClass()」,同時仍然擴展和使用原始JS類中的所有內容,並且能夠將我的功能添加到TS類,並且當我重寫基類JS類中的功能時做。

+0

[這是SO回答](http://stackoverflow.com/questions/14000645/how-to-extend-native-javascript-array-in-typescript)與你的問題有關嗎? – A1rPun

+0

有趣的是,我只是在發佈了這條消息之後發現了jqfaq帖子,並且正在使用其中的想法來查看我是否能找到任何地方。這個問題是類似的,但不完全相同,因爲SO帖子和建議的解決方案似乎都圍繞着擴展內置類型,這在試圖將它們應用到第三方JS庫時似乎並不奏效。 – shawty

回答

0

如果我的問題正確,您可以讓您的類myB​​ar擴展類myFoo,從而繼承給定的實現並實現界面中定義的條件。

+0

問題是,「myFoo」不存在。 「foo」的TS接口是「d。ts「文件描述了已存在於」foo.js「中的一個具體實現因爲」foo「在JS中定義了,所以我不能在打字稿類中擴展」foo「 – shawty

+0

你應該能夠擴展」foo「定義從「d.ts」文件... – Aides

+0

這不僅僅是關於擴展定義,我必須創建新定義的具體實現,然後填寫特定的過程來覆蓋。我會稍微更新我的問題看看是否有幫助 – shawty