store icon indicating copy to clipboard operation
store copied to clipboard

Strange behavior when actions classes extends an reusable abstract class

Open tigredonorte opened this issue 8 years ago • 1 comments

This is a...

  • [ ] feature request
  • [ x ] bug report
  • [ ] usage question

What toolchain are you using for transpilation/bundling?

  • [ x ] angular/cli
  • [ ] Custom @ngTools/webpack
  • [ ] Raw ngc
  • [ ] SystemJS
  • [ ] Rollup
  • [ ] Other

Environment

NodeJS Version:6.10.3 Typescript Version:2.3.4 Angular Version:2.4.10 @angular-redux/store version: @angular/cli version: 1.5.0 OS:windows

Expected Behaviour:

When class A and class C extends B, we expect output in console.log(this.constructor.name) in B class it's always 'A' (if we call a.method()) and 'C' if we call c.method.

Actual Behaviour:

if i call c.method(), it prints "A" (if a and c extends b).

Stack Trace/Error Message:

not necessary

Code

abstract class B{
     public abstract getName();

     @dispatch()
     public doAction(){
          console.log(this.getName(), this.constructor.name);
     }
}

class AAction extends B{
     public getName(){
          return 'FOO';
     }
}

class CAction extends B{
     public getName(){
          return 'Bar';
     }
}

var a = new AAction();
var b = new BAction();
a.doAction(); //it prints correctly "FOO", 'AAction'
b.doAction(); //it prints wrongly "FOO", 'AAction', the correct is "Bar", "BAction"

it only occurs in store folder. It not occurs in others folder..

tigredonorte avatar Nov 13 '17 12:11 tigredonorte

@tigredonorte looking into this, and was trying to setup a unit test to reproduce the issue - https://github.com/angular-redux/store/pull/487/files

I tried a few combinations:

  • two classes extending from the same abstract class
  • a class extending from another class and overriding getName
  • a class extending from another class and calling super.getName() + returning it's own value

Unless I'm misunderstanding the test case - I was unable to reproduce what you are seeing. Is there any more details that you could provide?

I tend to avoid inheritance in my code so haven't run into this yet, but want to ensure I can meet your use cases also.

e-schultz avatar Nov 17 '17 16:11 e-schultz