2016-01-13 174 views
0

樣品:「意外令牌implements`錯誤

@Pipe({ name: 'values', pure: false }) 
export class ValuesPipe implements PipeTransform { 
    transform(value: any, args: any[] = null): any { 
    return Object.keys(value).map(key => value[key]); 
    } 
} 

看來,類繼承ES6中不支持。是否有替代方案不需要對超類進行逆向工程?

+0

編譯打字稿不是一個選項? – Langley

+0

@Langley此答案標有'ecmascript-6'標籤的原因。如果我打算在TS中從頭開始重寫我的整個應用程序,那我就不會問。除此之外,NG2應該是ES6友好的。最終,其他用戶將面向ES6並遇到同樣的問題,所以它不是我的實現專有的。 –

+0

我只是試圖獲得有關你的場景的信息,tsconfig.ts有一個ES6選項的目標,我不知道這是否允許你使用ts而不必重寫你的整個應用程序。 – Langley

回答

1

ES6確實有類繼承。班級由extends繼承。

當您使用implements時,您需要對接口進行類型檢查。如果你想檢查類型,你應該使用Typescript - 如果你不需要類型檢查,那麼你不需要implements。使用實現不會影響輸出代碼 - 它只是在編譯期間進行類型檢查。

例如在打字稿:

class myClass{ 
    public myID:number 
    constructor(){ 
    } 
    talk(){ 
     console.log("hi there");  
    } 
} 

class newClass { 
    public myID:number; 
    talk(){ 
     console.log("Hi from new Class"); 
    } 
} 

class newClassImplements implements myClass { 
    public myID:number; 
    talk(){ 
     console.log("Hi from new Class");  
    } 
} 

newClassnewClassImplements結果都以完全相同的編譯後的相同的JavaScript。 implements的版本只是要求編譯器確保它具有與myClass相同的接口,如果它沒有在編譯時出現錯誤。

在上面的示例中ValuesPipe不是繼承自PipeTransform它只是實現接口。如果你不需要類型檢查,你應該能夠寫出你想要的功能,並忘記實現接口。

+0

Derp。我應該早點想出來。謝謝。 –