2017-08-01 144 views
-3

我有接口,實現此接口的基抽象類以及創建基類的新實例的Angular組件中的一些屬性。這種結構不給我的錯誤在瀏覽器中(也許是因爲它是經得起任何的JS),但我得到了TSLint錯誤在Typescript中擴展抽象類

TS2511:無法創建抽象類的實例KitCustomizationBase

如果我刪除abstract字,該錯誤消失。
正如我在TS文檔中看到的抽象類可能包含一些實現的邏輯。

有人可以解釋它嗎?

我的界面:

export interface KitCustomizationInterface { 
    items: number[]; 
    indexes: number[]; 
    counter: number; 
} 

我的基類(我越來越沒有構造相同的錯誤):

import { KitCustomizationInterface } from '...'; 

export abstract class KitCustomizationBase implements KitCustomizationInterface { 
    public items: number[]; 
    public indexes: number[]; 
    public counter: number; 

    constructor(items: number[], indexes: number[], counter: number) { 
    this.items = items; 
    this.indexes = indexes; 
    this.counter = counter; 
    } 
} 

而且從我的組件代碼:

... 
let k: KitCustomizationBase = new KitCustomizationBase([], [], 0); 
... 

重複標記的注意事項:
1. Angular擁有(因爲TS)不同的時刻abo與接口一起工作。
2.此外,我們正在討論在Google搜索中沒有結果的特定TSLint錯誤。
3.複製標記給出的鏈接沒有提供明確的答案。這更像是一個答案「去閱讀文檔」。有關具體內容的文檔?我問了具體的錯誤,我得到了答案,謝謝大家的幫助。

+10

你不能'new'抽象類,這是'abstract'的主要觀點。我也沒有看到你擴展抽象類。 –

+0

[Interface vs Abstract Class(general OO)]的可能重複](https://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo) –

+0

只有通過擴展然後創建新實例? – WeekendMan

回答

2

你在做什麼本身就是一個矛盾。當您將課程標記爲abstract時,您明確禁止實例化。然後你去實習你的班級。你必須下定決心。

  • 如果你不想實例化你的類,不要這樣做。你必須從你現有的類派生一個類並實例化它。在TypeScript中,您還可以選擇將兼容對象分配給變量(稱爲structural typing,TypeScript的鴨子打字風格)。但是你不需要你的構造函數。你甚至不需要這個類,你的界面將會很好。
  • 如果您想實例化您的課程,請不要使其成爲abstract。如果抽象類不允許實例化,那麼整個意圖就是這樣。
+0

感謝您的幫助。 – WeekendMan

+0

還不錯。用於提及由普通對象實現的'interface'的+1。吻 –