重写 TypeScript 中的超级方法

Overriding super method in TypeScript

我正在尝试 overload/override TypeScript 中的 class 方法,其中上级方法采用零个参数,从属方法采用一个参数。

我的 TypeScript 代码类似于以下内容:

class Super {
  create(): void {}
}

class Sub extends Super {
  create(arg: object): void {}
}

const sub = new Sub();
sub.create({});

此代码产生以下错误:

Property 'create' in type 'Sub' is not assignable to the same property in base type 'Super'.
  Type '(arg: object) => void' is not assignable to type '() => void'. ts(2416)

为什么这不起作用?是因为转译的 JavaScript 输出根本无法在这两个 class 之间进行继承区分吗?我将如何完成这样的事情?

// index.ts

class Super {
    create(): void {}
}

class Sub extends Super {
    create(arg?: any): void {}
}

let sub = new Sub();
sub.create(1);

在 TypeScript 中,子class 的类型必须可分配给其父class 的类型。这允许多态性工作:

let sub: Sub = new Sub();
// polymorphism: we can treat a Sub as a Super
let parent: Super = sub; 

但是,您的代码无效,因为在上述情况下,我们可以不带参数调用 parent.create();但是,实际运行的代码是 Sub.create 需要 根据合同 arg 存在。

总结:子类型的所有成员都必须可分配给父类型的相应成员。 (arg: any) => void 不可分配给 () => void