2017-08-22 61 views
0

我是新來的打字稿,我創建下面的問題類打字稿類的成員函數不能訪問

export class ModuleInfoContainer extends Array<ModuleInfo> { 
    constructor() { 
    super(); 
    } 
    search(id: number) { 
    let k: ModuleInfo; 
    this.every(a => { 
     k = a.search(id); 
     return !k; 
    }); 
    return k; 
    } 
} 

我希望它的工作的工作時間,但在調試時,所有的陣列功能是訪問,但成員函數searchModuleInfoContainer無法訪問。然而 後幾個谷歌搜索我得到了一個例子,結束了這段代碼

export class ModuleInfoContainer extends Array<ModuleInfo> { 
    constructor() { 
    super(); 
    } 
search = function (id: number) { 
    let k: ModuleInfo; 
    this.every(a => { 
     k = a.search(id); 
     return !k; 
    }); 
    return k; 
    }; 
} 

和它工作正常。

第一個代碼有什麼問題?

編輯:ModuleInfo

export class ModuleInfo { 
    Id: number; 
    Name: string; 
    DisplayName: string; 
    ChildModules: ModuleInfoContainer; 
    DependsOn: ModuleInfo[]; 
    parent: ModuleInfo; 
    search(id: number): ModuleInfo { 
    if (this.Id === id) { 
     return this; 
    } else if (this.ChildModules && this.ChildModules.length) { 
     return this.ChildModules.search(id); 
    } 
    return undefined; 
    } 
} 

這是我試圖調用此我搜索功能:

let k = new ModuleInfoContainer(); 
k.search(1); 

打字稿成功編譯但在運行時出現錯誤,說k does not have a member function named search (錯誤可能與chrome給出的錯誤不完全相同,但含義相同)。然而第二個代碼工作正常。

+0

你好嗎?我只是做了一個遊樂場的例子,它工作正常。 – toskv

+0

我使用這個代碼與角4,在鉻第一個只是說沒有找到功能搜索。當我嘗試調用類似 'let k = new ModuleInfoContainer(); k.search(1);'我沒有在任何其他瀏覽器上進行調試。 – goyaltushar92

+0

你可以分享ModuleInfo類嗎? – hagner

回答