Búsqueda de sitios web

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