function getPropertyDescriptor(obj, property) {
const descriptor = Object.getOwnPropertyDescriptor(obj, property);
if (descriptor !== undefined)
return descriptor;
const proto = Object.getPrototypeOf(obj);
if (proto === null)
return undefined;
return getPropertyDescriptor(proto, property);
}
function getPropertyOrDefault(obj, property, defaultValue) {
const d = getPropertyDescriptor(obj, property);
if (d) {
if (Object.prototype.hasOwnProperty.call(d, "value"))
return d.value;
if (Object.prototype.hasOwnProperty.call(d, "get"))
return d.get.call(obj);
}
return defaultValue;
}
function getPropertyOrDefault2(obj, property, defaultValue) {
if (Reflect.has(obj, property)) return obj[property];
return defaultValue;
}
class T {
constructor() {
this.requiredField = 1;
this.undefinableField = undefined;
this.m_requiredProp = 1;
this.m_undefinableProp = undefined;
}
get requiredProp() {
return this.m_requiredProp;
}
set requiredProp(value) {
this.m_requiredProp = value;
}
get undefinableProp() {
return this.m_undefinableProp;
}
set undefinableProp(value) {
this.m_undefinableProp = value;
}
}
var t = new T();
t.requiredField = 1;
t.requiredProp = 1;
class D extends T {}
var d = new D();
d.requiredField = 1;
d.requiredProp = 1;