tl; dr:我需要將已編譯的Typescript原型定義應用於我已定義爲該類的對象。通過打字稿擴展JavaScript對象原型
情況: 我需要一個打字稿類中定義一些業務邏輯來擴展JavaScript對象。
這可能看起來有點像:
class Address
{
constructor(
public Street: string,
public Number: number,
public Zip: number,
public City: string)
{ }
public get FullAddress()
{
return this.Street + ' ' + this.Number + ', '
+ this.Zip + ' ' + this.City;
}
}
編譯加上JS代碼由FullAddress
擴展對象原型。如果我打電話new Address('Somestreet', 5, 3564, 'SomeCity')
一切都像一個魅力。
問題:當我(採用了棱角分明的$http
在我的情況)
$http.get('/api/address').then((answer: AngularPromise<Address[]>) =>
{
console.log(answer.data[0].FullAddress());
});
得到一些JS對象我可以調用函數FullAddress
的對象,因爲在打字稿的功能定義上類定義。
現在,當我在瀏覽器中執行代碼answer.data.FullAddress()
沒有定義(這是有道理的,因爲打字稿只是提供了類型定義,從來沒有觸摸的物體
嘗試性解決方案:一個可能的解決辦法是調用構造爲每個對象(有點像以下)
$http.get('/api/address').then((answer: AngularPromise<Address[]>) =>
{
for(var i = 0; i < answer.data.length; i++)
{
answer.data[0] = new Address(answer.data[0].Street, ans.....);
}
console.log(answer.data[0].FullAddress());
});
,也許過載Address
構造以接受併發症ete反對減少樣板。
實際的問題:因爲我需要的對象是一種更爲複雜的嵌套的結構比這裏所描述的,上面的解決方案,簡單的地址結構需要我寫樣板的大量的,我覺得好像有必須是解決這個問題的更好辦法。
有趣的方法......還是感覺有點靠不住,但已經這樣更好。 我的問題是:我擔心它只適用於內部模塊,對(因爲我在Angular和NodeJS中使用我的類,所以我只使用外部模塊:|) – Aides