Typescript: объявить пустой объект класса - PullRequest
0 голосов
/ 28 мая 2018

Можно ли объявить объект из класса без значений по умолчанию?

У меня есть класс, который выглядит как показано ниже;

export class Month {
 January: string;
 February: string;
 March: string;
 ...
}

mapMyPayload(specialMonths: Birthdays) {
 let myMonth = new Month;
 console.log(myMonth); //=> Month {}
    // here I expect the Object.keys(myMonth) 
    // returns {January=undefined, February=undefined, ...}
    // since I assume the new Month 
    // declares the myMonth as an object with undefined as its value
 Object.keys(myMonth).forEach(m => {
    // iterate thru the keys 
    // check if the month exists inside the specialMonths
    // and is not null or undefined
  if (specialMonths[m] != null) { 
   myMonth[m] = specialMonths[m];
 );
 return myMonth;
}

Я пытаюсь добиться проверкидля любого undefined или null в объекте и вернуть этот класс.

Я просмотрел множество примеров кодов и документации: либо у вас есть неявный конструктор, либо явный конструктор, вы можете объявить свой новый класс, используя new перед именем класса, но после этого они объявляют некоторые значения.Поэтому я думаю, что экземпляры не существуют до того, как они будут объявлены какой-то внешней областью действия.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018
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, которую несет машинопись.

Возможно, если бы вы немного подробнее рассказали о том, чего вы пытаетесь достичь, мы могли бы дать вам лучшее решение?

0 голосов
/ 28 мая 2018

Почему это невозможно?

Полям и свойствам внутри класса будут присвоены значения по умолчанию, в вашем случае - ноль для строки, если вы не укажете их значения по умолчанию, например:

export class Month {
   January: string = "Something";
   February: string = "Something";
   March: string = "Something";
   ...
}
...