typescript - La firma de la interfaz no coincide
No puedo entender por qué estoy recibiendo un error por esto:
export interface IGrid {
(gridCell: GridCell): boolean
}
En mi clase tengo
foo(gridCell: GridCell): boolean {
return true;
}
Error :
La clase 'X' implementa incorrectamente la interfaz 'IGrid'. El tipo 'X' no proporciona ninguna coincidencia para la firma '(gridCell: GridCell): boolean'
Actualización:
He añadido un parámetro a la firma gridFormat de la interfaz.
export interface IGrid {
gridFormat(gridCell: GridCell, x: number): boolean
}
Clase :
gridFormat(gridCell: GridCell): boolean {
return true;
}
El problema ahora es que no hay ningún error, la clase no implementa la función con el parámetro x: number. ¿Cómo puedo hacer que la interfaz requiera la función correctamente?
Respuesta #1
Su interfaz IGrid es una interfaz de función, lo que significa que la interfaz describe una función. Puede implementarla así:
let yourFunc: IGrid = (gridCell: GridCell): boolean => {
return true;
};
Si quieres implementarlo en una clase, tu interfaz probablemente debería declarar una interfaz de tipo clase con miembros de función:
export interface IGrid {
foo(gridCell: GridCell): boolean
}
class Grid implements IGrid {
foo(gridCell: GridCell): boolean {
return true;
}
}
Re: Por qué no hay error cuando la implementación carece de un parámetro definido en la interfaz:
Esto es por diseño. Consulta este problema y las preguntas frecuentes de TypeScript
