Avatar ·

TypeScript 中的 !(感叹号)运算符:在访问属性时它有什么作用?

Что такое оператор ! (non-null assertion) в TypeScript?

Всем привет! Я недавно начал изучать TypeScript и наткнулся на странный синтаксис с восклицательным знаком. Встретил такой код:

let name: string | null = getUserName();
console.log(name!.toUpperCase());

Я понимаю, что name может быть string или null. Но что делает этот ! после name? Без него TypeScript ругается: "Object is possibly 'null'". А с ним — всё работает.

Это какой-то оператор? Он изменяет тип? Или это просто способ сказать компилятору "заткнись"? Когда его уместно использовать, а когда это опасно? Я читал про optional chaining (?.), но тут совсем другой синтаксис.

Можете объяснить простыми словами, что делает ! (exclamation mark / bang) при обращении к члену объекта? И чем он отличается от обычного утверждения типа через as?

Спасибо!