Class `get` ("getter") is not supported
tianyingchun opened this issue · comments
const resolvedValue = initializer
? Reflect.apply(initializer, this, [])
: Reflect.apply(get, this, []);
const decoratedValue = decorate(resolvedValue).bind(this);
if we need to decorator one property or getter()
// member field.
@track({ fieldName: 'fieldName' })
private fieldName = 'fieldName';
// getter
@track({ getName: 'getter() getMyName' })
private get getMyName() {
return this.parentMethod() + 'my name';
}
private handleTrack = () => {
console.log('handleTrack: property decorator:', this.getMyName, this.fieldName);
return {
result: '({} as any).name.handleTrack',
};
}
for property decorate will lazy execute, it will result in
const resolvedValue = initializer
? Reflect.apply(initializer, this, [])
: Reflect.apply(get, this, []);
// resolvedValue value will be string,
// but if we execute
const decoratedValue = decorate(resolvedValue).bind(this);
// will aways return us a function.
so maybe we need to do some check here like below code:
const decoratedValue = isFunction(resolvedValue)
? decorate(resolvedValue, name).bind(this)
// for getter, member field we need to direct evaluate this express. and get the final value to consumer.
: Reflect.apply(decorate(() => resolvedValue, name), this, []);
Yes, that's quite possibly a bug. I don't think we've handled the use case for a getter
. Feel free to submit a PR with a test case! 🙏