i have class , class b, extends class a. class has method accepts aproperties enum first argument. class b has same method accepts aproperties or bproperties enum first argument.
enum aproperties { x, y } enum bproperties { z, w } class { setproperty(property: aproperties, value: number) { } } class b extends { setproperty(property: aproperties | bproperties, value: number) { } }
setproperty method of class b added typescript editor know method can accept both aproperties , bproperties. when compiled javascript, having setproperty in classb doesn't make sense 100% identical classa method.
is there way prevent method compiled in javascript? guess comment before method job.
i don't think there's way of asking compiler skip on code without commenting out, can design things bit differently , avoid need add implementation of method in child class:
enum aproperties { x, y } enum bproperties { z, w } class base<t> { setproperty(property: t, value: number) { // ... } } class extends base<aproperties> {} class b extends base<aproperties | bproperties> {}
this approach adds class (base
) has implementation of setproperty
, happens once, , in a
, b
declare type of property
enum.
there's discussion/suggestion have default generic types (when it's implemented) make easier, like:
class a<t = aproperties> { setproperty(property: t, value: number) {} } class b extends base<aproperties | bproperties> {}
but you'll need base
class.
edit
i thought of solution, you'll better doesn't require other class (base
):
interface base<t> { setproperty(property: t, value: number); } class implements base<aproperties> { setproperty(property: aproperties, value: number) { // ... } } class b implements base<aproperties | bproperties> { setproperty: (property: aproperties | bproperties, value: number) => void; } let = new a(); a.setproperty(aproperties.x, 4); let b = new b(); b.setproperty(aproperties.x, 4); b.setproperty(bproperties.w, 4);