重写 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
。
我正在尝试 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
。