Восклицательный знак в Typescript, но не утверждение типа Nullable
Нашел интересный код в исходных текстах Angular 5.2:
Восклицательный знак перед переменной индекса массива здесь
signature ![i]
Восклицательный знак перед скобками вызова функции здесь
this._methods.get(message.method) !(message);
Пробовал этот синтаксис на площадке Typescript - без ошибок: здесь
Но все еще не могу найти / понять, что это значит. Пожалуйста, помогите.
2 ответа
Это ненулевой оператор утверждения. Это способ сказать компилятору: "это выражение не может быть здесь нулевым или неопределенным, поэтому не жалуйтесь на возможность того, что оно будет нулевым или неопределенным". Иногда средство проверки типов не может сделать это определение самостоятельно.
Это старый вопрос, но я пытаюсь на него ответить.
Пустое место вокруг! не важно. ! в вашем случае это тоже не нужно. Но если немного изменить его, вы увидите проблему:
let signature: Array<any>|undefined = ['test']
let i = 0;
console.log(signature ! [i])
signature=undefined
console.log(signature ! [i]) // <= crash
С участием ! вы говорите: объект до этого не равен нулю . TypeScript доверяет вам, и если ваше предположение неверно, скомпилированный Javascript не удастся.