что `?` означает перед каким-либо атрибутом объекта? и почему мой файл TS не принимает его? - PullRequest
3 голосов
/ 28 февраля 2020

Я всегда использую этот тип поведения, показанный здесь в директиве angular *ngIf, когда у меня есть объект, который может быть неопределенным или отличным от требуемого объекта

<div *ngIf="object?.foo">
  ...
</div>

Я знаю, что это работает, но я не знаю почему ...

Но когда я попытался использовать его в файле if в моем TypeScript файле, как показано ниже angular, я получаю две разные ошибки TS1005, TS1109, чередуя одну другим, в каждой строке, где я пытаюсь использовать это поведение.

if(object?.foo){} // error TS1109
if(object?.foo){} // error TS1005
if(object?.foo){} // error TS1109
if(object?.foo){} // error TS1005

Я использую Angular 7.3.9 для этого проекта

Ответы [ 2 ]

9 голосов
/ 28 февраля 2020

Причина, по которой он работает в вашем шаблоне, заключается в том, что angular будет оценивать его следующим выражением:

<div *ngIf="object && object.foo">

, что предотвратит ошибку вызова свойства объекта, если объект равен нулю.

Ссылка на документацию: https://angular.io/guide/template-syntax#the -safe-navigation-operator ---- и-null-property-paths

Не работает в машинописной части Ваш компонент, потому что он не поддерживается машинописным шрифтом.

Единственное использование ? для переменных в машинописном письме - указать, что параметр для метода является необязательным:

function myFunc(mandatoryParam: any, optionalParam?: any) {
    ...
}

myFunc('hello'); // Will work
myFunc('hello', 'world'); // Will work too

Как уже упоминалось в комментариях к этому ответу TypeScript добавит поддержку синтаксиса шаблона angular в версии 3.7: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional -chaining

3 голосов
/ 28 февраля 2020

Typescript 3.7+ имеет необязательную цепочку (https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optional -цепь )

При этом выражение if (object?.foo) {} является допустимым синтаксисом - условие преобразуется в неопределенное, если object не определено или равно нулю.

Проверьте версию машинописного текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...