typescript не умеет анализировать проверку каторая не в if?
interface IUser {
user: {
name: 'aaa';
} | null;
}
const x: IUser = {} as IUser;
const isUser = x.user;
if (isUser) {
//кидает ошибку `x.user is possibly null`
x.user.name;
}
if (x.user) {
// все норм
x.user.name;
}
вопрос: можно ли как то дать понять ts что проверка в константе isUser .
Ответы (1 шт):
Автор решения: PZBird
→ Ссылка
В данном случае typescript подсвечивает все верно, посмотрите следующий пример
const x = {
user: {
name: 'aaa',
}
}
const isUser = x.user;
x.user = null;
console.log(isUser);
console.log(x.user);
Как видно, даже если x.user присвоить null, ваш вложенный объект { name: 'aaa' } останется нетронутым и isUser все еще будет хранить на него ссылку. В итоге ваш if упадет при
const x: IUser = { user: { name: 'aaa' }} as IUser;
const isUser = x.user;
x.user = null;
if (isUser) { // прошли, так как isUser не пустой
x.user.name; // упали так как x.user - null
}