为什么接口分配不考虑方法参数类型

时间:2018-04-05 17:48:08

标签: typescript

更新:抱歉。我在发布原始代码示例时跳了一下枪。我已经更新了代码并在一个单独的项目中进行了测试。当派生接口包含一个具有相同名称和第一个参数类型的方法,然后具有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中的可变参数函数有关吗?但是这种行为汇编起来令我感到困惑。任何人都可以提供这种行为的解释吗?

1 个答案:

答案 0 :(得分:0)

此代码包含错误并始终存在。如果您没有看到错误,那么您已经做错了。

enter image description here