更新:抱歉。我在发布原始代码示例时跳了一下枪。我已经更新了代码并在一个单独的项目中进行了测试。当派生接口包含一个具有相同名称和第一个参数类型的方法,然后具有ADDTIONAL参数(基本接口没有)时,似乎出现了我的问题。 Repro repo here(如果我错误地复制/粘贴了任何代码):https://github.com/lukewis/typescript_interface_assignment
似乎当打字稿正在考虑对象是否实现了一个接口时,它在比较函数时并不考虑参数类型。我猜这是一个刻意的设计选择,但它对我没有任何意义。请考虑以下事项:
interface IBase {
id: string;
}
interface IFoo extends IBase {
method1(param1: string): void;
}
interface IBar extends IBase {
method1(param1: string, param2: boolean): void;
}
class Foo implements IFoo {
public readonly id = "foo";
public method1(param1: string): void {
}
}
// The following line compiles with NO ERROR....but why??
const bar: IBar = new Foo();
我猜测这可能与javascript中的可变参数函数有关吗?但是这种行为汇编起来令我感到困惑。任何人都可以提供这种行为的解释吗?