2017-01-30 11 views
0

Я пытался использовать Non-null assertion operator, как показано на TypeScript official documentation. Ниже мой код:Машинопись: не может прочитать свойство «параметра long_name» нулевых

let streetNumberComponent = this.getAddressComponent(addressComponents, 'street_number'); 
    address.streetNumber = streetNumberComponent!.long_name(); 

    ... 

    public getAddressComponent(addressComponents: Array<any>, type: string): any { 

     addressComponents.filter(component => { 
      let types : Array<string> = component.types; 
      if(_.includes(types, type)) { 
       return component; 
      } 
     }); 

     return null; 
    } 

Я ожидал, что свойство long_name() будет доступен только если streetNumberComponent не null. Но это не так, и я получаю:

TypeError: Cannot read property 'long_name' of null 

Обратите внимание, что следующий код работает правильно:

address.streetNumber = streetNumberComponent && streetNumberComponent.long_name(); 

Я использую:

  • Машинопись: 2,0. 10
  • Угловой: 2.3.1
  • Угловой CLI: 1.0.0-beta.24
+0

'streetNumberComponent! .long_name();' Этот восклицательный знак является опечаткой при написании вашего вопроса? –

+0

Это оператор 'Non-null assertion' типа TypeScript. –

+0

О, хорошо, мой плохой, не так много сделал на TS ха-ха. –

ответ

2

Оператору ненулевое утверждения используются только в машинописи, она не переживет процесс компиляции и нет в коде js. Как указано в документах:

the! непустой оператор утверждение просто удаляется в излучаемого кода JavaScript

Этот оператор не реально проверить, что, прежде чем он не является нулевым, это просто способ для вас, чтобы сообщить компилятору, что вы конечно, это не null, даже если компилятор не может сделать это сам.

Очевидно, что при запуске этого кода streetNumberComponent - null.

+0

Спасибо Ницан. Какова реальная полезность такого оператора? Я не вижу конкретного использования этого! –

+0

Пример, который у них есть в ссылке в вашем вопросе, показывает такой сценарий. Вы иногда знаете больше, чем компилятор, и поэтому язык вводит различные способы исправления компилятора, одним из которых является этот оператор, другой - утверждение casting/type. –

+0

Большое спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^