2017-06-20 153 views
1

我想不通爲什麼我得到了這樣的錯誤:接口簽名不匹配

export interface IGrid { 
    (gridCell: GridCell): boolean 
} 

在我的課堂我有

foo(gridCell: GridCell): boolean { 
    return true; 
} 

錯誤:

Class 'X' incorrectly implements interface 'IGrid'. Type 'X' provides no match for the signature '(gridCell: GridCell): boolean'

更新:

我已經爲接口的gridFormat簽名添加了一個參數。

export interface IGrid { 
    gridFormat(gridCell: GridCell, x: number): boolean 
} 

類:

gridFormat(gridCell: GridCell): boolean { 
    return true; 
} 

現在的問題是沒有錯誤,類沒有實現與x: number放慢參數的功能。我怎樣才能讓界面正確地要求功能。

回答

2

IGrid接口爲function interface,這意味着接口描述的功能。你可以這樣實現它:

let yourFunc: IGrid = (gridCell: GridCell): boolean => { 
    return true; 
}; 

如果你想實現它在類的界面或許應該申報class type interface與函數成員:

export interface IGrid { 
    foo(gridCell: GridCell): boolean 
} 

class Grid implements IGrid { 
    foo(gridCell: GridCell): boolean { 
     return true; 
    } 
} 

回覆:爲什麼沒有錯誤時,實施中缺少接口定義的參數:

這是由設計。見this issueTypeScript FAQ

+0

好吧,這工作,但我還是不能讓我的接口工作如何我想它。我已經更新了這個問題。簽名不匹配,但沒有錯誤。 –

+0

@el_pup_le這實際上是由設計。參見[此](https://stackoverflow.com/questions/35541247/typescript-not-checking-function-argument-types-declared-by-interfaces)和[此](https://github.com/Microsoft/ TypeScript/wiki/FAQ#why-are-functions-with-less-parameters-assignable-to-functions-that-take-more-parameters) – Saravana

+0

謝謝,這很令人沮喪。我看你是C#的人,你知道C#是否被設計成這樣嗎? –