store
store copied to clipboard
Strange behavior when actions classes extends an reusable abstract class
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 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.