UNPKG

@leafer/decorator

Version:
24 lines (18 loc) 826 B
import { IObject, IValue } from '@leafer/interface' export function defineKey<T>(target: T, key: string, descriptor: IObject & ThisType<T>, noConfigurable?: boolean): void { if (!noConfigurable) descriptor.configurable = descriptor.enumerable = true Object.defineProperty(target, key, descriptor) } export function getDescriptor(object: IObject, name: string) { return Object.getOwnPropertyDescriptor(object, name) } export function createDescriptor(key: string, defaultValue?: IValue) { const privateKey = '_' + key return { get() { const v = (this as IObject)[privateKey]; return v == null ? defaultValue : v }, set(value: IValue) { (this as IObject)[privateKey] = value } } } export function getNames(object: IObject): string[] { return Object.getOwnPropertyNames(object) }