Значение, которое изначально не определено, имеет громоздкий синтаксис инициализации

#typescript

Вопрос:

Рассмотрим следующий код:

let assignment: AssignmentEntity | undefined = undefined;

Я нахожу довольно раздражающим писать undefined дважды. Однако ни одно из них нельзя опустить. Первое undefined необходимо, так как оно является частью типа, а второе значение необходимо для начального значения.

Есть ли какой-нибудь приемлемый способ написать это в более короткой форме?

Комментарии:

1. Вы можете пропустить эту = undefined часть, так как она используется по умолчанию.

2. Что мешает вам просто написать let assignment: AssignmentEntity; в первую очередь? Конечно, при этом есть оговорка «Переменная используется перед назначением», но

3. и если вы не планируете выполнять назначение позже, то совет Алексея — это правильный путь — компилятору просто нужно знать , что переменная assignment может содержать либо AssignmentEntity или undefined -поскольку она объявлена с let , нет необходимости назначать ее явной undefined .

4. @VitalyB — к счастью, это вызвано только попыткой проверить undefined , не ожидается ли, что переменная будет храниться undefined как возможный тип (по общему признанию, в таких случаях ошибка может быть более конкретной, но ладно)

5. @OlegValter отметил. Спасибо!

Ответ №1:

Если при объявлении не указано начальное значение, переменная инициализируется значением undefined . Так что в этом случае вы можете пропустить инициализацию:

 let assignment: AssignmentEntity | undefined;
 

https://262.ecma-international.org/11.0/#sec-let-and-const-declarations

Ответ №2:

Я предпочитаю этот способ:

 type Maybe<T> = T | undefined;

class AssignmentEntity {
    foo = "bar"
}

let assignment: Maybe<AssignmentEntity>;

assignment.foo; // Object assignment is possibly 'undefined'
 

И, вероятно, тоже лучше, чем использовать функцию Javascript