class Foo {
a: string;
b: string;
c: number;
}
var foo = new Foo();
console.log(foo.a); //undefined
update: это переносится на следующий код JS:
var Foo = /** @class */ (function () {
function Foo() {
}
return Foo;
}());
var foo = new Foo();
console.log(foo.a);
У вашего объекта нет ключей, потому что они еще не определены, поэтому они прибегают к литералу «undefined»в отличие от «неопределенного» в качестве значения.Вы можете попытаться сделать что-то в строках по умолчанию с неопределенным значением:
class Foo {
a: string = undefined;
b: string = undefined;
c: number = undefined;
}
var foo = new Foo();
console.log(foo.a); //undefined
console.log(foo); //=> Foo{a: undefined, b: undefined, c: undefined}
Object.keys(foo).forEach(property => console.log(property));
// keys log as empty and not undefined
это переносится на следующий JS:
var Foo = /** @class */ (function () {
function Foo() {
this.a = undefined;
this.b = undefined;
this.c = undefined;
}
return Foo;
}());
var foo = new Foo();
console.log(foo.a); //undefined
console.log(foo); //=> Foo{a: undefined, b: undefined, c: undefined}
Object.keys(foo).forEach(function (property) { return console.log(property); });
// keys log as empty and not undefined as part of the forEach loop
Я бы лично советовал против этой реализациипоскольку он склонен к неожиданному поведению и идет вразрез со статически типизированной версией JS, которую несет машинопись.
Возможно, если бы вы немного подробнее рассказали о том, чего вы пытаетесь достичь, мы могли бы дать вам лучшее решение?