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, []);
if we need to decorator one property or getter()
for property decorate will lazy execute, it will result in
so maybe we need to do some check here like below code: