Вы используете any
в аннотации к flag
. any
по определению присваивается любому типу и присваивается любому типу. Это означает, что результатом выражения flag ? flag : 1
будет any
(поскольку одним из результатов троичного выражения является any
, тип выражения будет any | 1
, который будет уменьшен до any
).
Как правило, избегайте any
. Если вы действительно не знаете тип во время компиляции, используйте unknown
. В этом случае удаление аннотации приводит к ошибке, как и ожидалось:
type User = {
name: string;
};
const flag = false; // no annotation
let list1: User;
list1 = flag ? flag : 1; // err