#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