TypeScript接口实现';t检验方法参数

TypeScript接口实现';t检验方法参数,typescript,Typescript,Converter实现了IConverter,该方法只有一个参数,但Converter缺少此参数。如果我们没有完全实现此接口,为什么TS编译器不会引发错误?TypeScript允许将接受较少参数的函数视为接受较多参数的函数类型,因为额外的参数在运行时将被忽略。请参阅。类型脚本使用结构类型来确定类型兼容性。对于函数,这意味着声明和实现不需要完全相同的签名,只要编译器可以确定通过声明调用的实现是安全的 在这种情况下,这归结为,对于具有更多参数的函数声明,函数将使用更少的参数作为实现,因为额外传入的参

Converter
实现了
IConverter
,该方法只有一个参数,但
Converter
缺少此参数。如果我们没有完全实现此接口,为什么TS编译器不会引发错误?

TypeScript允许将接受较少参数的函数视为接受较多参数的函数类型,因为额外的参数在运行时将被忽略。请参阅。

类型脚本使用结构类型来确定类型兼容性。对于函数,这意味着声明和实现不需要完全相同的签名,只要编译器可以确定通过声明调用的实现是安全的

在这种情况下,这归结为,对于具有更多参数的函数声明,函数将使用更少的参数作为实现,因为额外传入的参数将被实现忽略,因此不会因此发生运行时错误(无论如何,在大多数情况下,依赖于
Function.length
的东西可能会有一些极端情况)

v1
而不是
v2
上出现错误的原因是,一旦赋值完成,编译器只知道变量的类型,而不是您最初赋给它的类型,并将根据变量的实际类型进行检查。因此对于
v1
这意味着
IConverter.convert
需要一个参数,无法知道它不需要。对于
v2
,它将检查
Converter.convert
,已知它不需要参数。

与相关方相关
interface IConverter {
    convert(value: number): string
}

class Converter implements IConverter {
    convert(): string { // no error?
        return '';
    }
}

const v1: IConverter = new Converter();
const v2: Converter = new Converter();

v1.convert(); // error, convert has parameter, although Converter's convert doesn't expect one
v2.convert(); // ok, convert has no parameters, although Converter implements IConverter which should has paramater