El mecanografiado no verifica los tipos de argumentos de función declarados por las interfaces

Esperaba DOS errores al compilar el siguiente código, pero mecanografiado lo compila sin ningún error.

interface IFoo{
    Bar(callback: (arg:string) => void):void;
}

class Foo implements IFoo {
    pub,lic Bar(callback: () => void):void{
        callback();
    }
}

var foo: IFoo;
foo = new Foo();
foo.Bar(() => {
    console.log("Hi");
})

Error esperado 1: IFoo.Bar requiere un argumento de función que a su vez toma un argumento de cadena. Sin embargo, cuando Foo implementa IFoo, se declara que Foo.Bar toma un argumento de función sin argumentos. Esperaría que esto sea un error de tipo.

Error esperado 2: foo es del tipo IFoo. Se llama a foo.Bar con un argumento de función que no toma argumentos, contrario a la definición de Bar en IFoo. Esperaría que esto sea un error de tipo.

Entonces, tanto al declarar una implementación concreta de un método de interfaz como al llamar al método de interfaz, parece que el tipo de firma de la función no se aplica.

Claramente, no entiendo cómo mecanografiado maneja la verificación de tipos de argumentos de función declarados por una interfaz. ¿Alguien puede explicar por qué esto se compila sin error?

Respuestas a la pregunta(1)

Su respuesta a la pregunta