Vscode-ng-language-service: Поддержка индексированных типов

Созданный на 7 июл. 2017  ·  32Комментарии  ·  Источник: angular/vscode-ng-language-service

При использовании реактивных форм в шаблоне HTML я получаю ошибку в заголовке.


Пожалуйста, введите верное имя.


Оба "formRegister.controls.company.invalid && formRegister.controls.company.touched" подчеркнуты как ошибка, но приложение работает нормально.

Самый полезный комментарий

У меня тоже возникла проблема с реактивными формами.

Временный обходной путь - получить доступ к свойству с помощью выражения аксессора свойства propety.

formRegister.controls['company'].invalid

Все 32 Комментарий

@ virgil-av Можете ли вы создать репозиторий, воспроизводящий эту проблему?

У нас такая же проблема с типом объединения. подобно

общественный час: TimeSpan | нить;

Ошибка:
Идентификатор «ччММ» не определен. ''не содержит такого члена

hhMM - действительный член в TimeSpan, но кажется, что Hour рассматривается как любой; (

@wupaz Ожидается, что hhMM в качестве члена, а тип объединения имеет только те элементы, которые являются общими для составляющих типов.

TypeScript сообщает об аналогичной ошибке

У меня тоже возникла проблема с реактивными формами.

Временный обходной путь - получить доступ к свойству с помощью выражения аксессора свойства propety.

formRegister.controls['company'].invalid

Также получаю это на самом деле. Я считаю, что раньше это было проблемой и в TS, но, похоже, теперь у меня работает. По крайней мере, в TS 2.4.0 и Angular 4.3.0:

Вот определение типа для свойства FormGroup.controls: https://github.com/angular/angular/blob/master/packages/forms/src/model.ts#L832

(property) FormGroup.controls: {
    [key: string]: AbstractControl;
}

Они оба работают в TS для меня, но точечная нотация жалуется в языковой службе:

form.controls['birthday']
form.controls.birthday

@intellix То же самое здесь

То же самое в v2.5.2 .

у меня такая же проблема в tsc v2.5.2, как говорили друзья

Можете ли вы создать репозиторий, воспроизводящий эту проблему?

@chuckjaz Я могу создать что-нибудь получше: без репозитория.

Потому что я протестировал и обнаружил, что эта проблема вообще не связана с исходным кодом или пакетами npm. У меня возникла эта проблема, а затем я протестировал вход в систему как другой пользователь, запустил код Visual Studio в том же каталоге, а затем я не получил ошибку в этом редакторе.

error_screenshot

Это также согласуется с тем, что ошибка появляется только в редакторе, и компилятор не жалуется при сборке.

Итак, очевидно, разница в зависимости от пользователя. Затем я протестировал удаление каталога конфигурации, и проблема исчезла. При повторном перемещении старого каталога обратно проблема появляется снова.

$ mv  ~/.config/{,old.}Code
$ code .
$ mv  ~/.config/{,new.}Code
$ mv  ~/.config/{old.,}Code
$ code .

Итак, какой-то мусор попал в каталог конфигурации, который запускает это (я предполагаю, что какой-то кеш). При наведении курсора мыши на valid из name.valid сразу после запуска редактора в течение нескольких секунд отображается всплывающая подсказка «Загрузка ...», затем она исчезает и возникает ошибка. Второй раз и позже ошибка отображается сразу при наведении курсора.

Я отследил разницу между пользователями, и это установка расширения vscode Angular.ng-template версии 0.1.7. И теперь я также могу предоставить репозиторий, в котором воспроизводится эта проблема:

  1. Клонировать https://github.com/colinskow/angular-electron-dream-starter
  2. Примените приложенный патч.
  3. Откройте src / app / hero-form.component.html.
  4. a) При установленном шаблоне Angular.ng name.valid и четыре других идентификатора будут подчеркнуты красным цветом (и [Angular] Identifier 'valid' is not defined. 'NgModel' does not contain such a member ошибки всплывающей подсказки).
    б) Если Angular.ng-template не установлен или отключен, ошибок не возникает.

Патч относится к v7.0.0 , но я также тестировал его против коммита bd5ad5f0 (Feature / ng2 rc5 (# 875)) от 21.08.2016, который является первым коммитом, содержащим src / app / app.module .ts, и ошибка возникла и там, поэтому я предполагаю, что это проблема для всех версий этого репо.

Поскольку angular-electronics-dream-starter является вилкой https://github.com/AngularClass/angular-starter , я также протестировал патч в этом репо, и там проблема не возникает, но вместо этого всплывающая подсказка содержит достоверную информацию :

no error

Первоначально тестировался на vscode версии 1.17.2 (фиксация b813d129). После обновления до версии 1.8.0 (фиксация dcee22027) результат такой же.


Из-за совершенно глупой обработки вложений Github патч закодирован в base64:

RnJvbSAyYzgxMTJmYzJhM2I2M2FkZjVmZjA0MDQ3NTcyNjAyMjc2ZWMwYmZiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E / SD1DMz1BNWtvbj0yMEw9QzM9Qjh2ZGFsPz0g
PGtvZGVAZGVua3VsZS5ubz4KRGF0ZTogRnJpLCAxNyBOb3YgMjAxNyAyMDozMDoyMCArMDEwMApT
dWJqZWN0OiBbUEFUQ0hdIEltcG9ydCBvZiBleGFtcGxlIGZyb20gaHR0cHM6Ly9hbmd1bGFyLmlv
L2d1aWRlL2Zvcm1zCgotLS0KIHNyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sICAgICAgIHwgNDAg
KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYXBwL2FwcC5tb2R1bGUudHMgICAgICAg
ICAgICB8ICA1ICsrKy0KIHNyYy9hcHAvaGVyby1mb3JtLmNvbXBvbmVudC5odG1sIHwgNTggKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2FwcC9oZXJvLWZvcm0u
Y29tcG9uZW50LnRzICAgfCAyMSArKysrKysrKysrKysrKysKIHNyYy9hcHAvaGVyby50cyAgICAg
ICAgICAgICAgICAgIHwgIDkgKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9u
cygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9hcHAvYXBwLmNvbXBv
bmVudC5odG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2FwcC9oZXJvLWZvcm0uY29tcG9uZW50
Lmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYXBwL2hlcm8tZm9ybS5jb21wb25lbnQudHMK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYXBwL2hlcm8udHMKCmRpZmYgLS1naXQgYS9zcmMvYXBw
L2FwcC5jb21wb25lbnQuaHRtbCBiL3NyYy9hcHAvYXBwLmNvbXBvbmVudC5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YWE1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9z
cmMvYXBwL2FwcC5jb21wb25lbnQuaHRtbApAQCAtMCwwICsxLDQwIEBACis8bmF2PgorCTxhIFty
b3V0ZXJMaW5rXT0iIFsnLi8nXSAiCisJCXJvdXRlckxpbmtBY3RpdmU9ImFjdGl2ZSIgW3JvdXRl
ckxpbmtBY3RpdmVPcHRpb25zXT0gIntleGFjdDogdHJ1ZX0iPgorCQlJbmRleAorCTwvYT4KKwk8
YSBbcm91dGVyTGlua109IiBbJy4vaG9tZSddICIKKwkJcm91dGVyTGlua0FjdGl2ZT0iYWN0aXZl
IiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPSAie2V4YWN0OiB0cnVlfSI + CisJCUhvbWUKKwk8
L2E + CisJPGEgW3JvdXRlckxpbmtdPSIgWycuL2RldGFpbCddICIKKwkJcm91dGVyTGlua0FjdGl2
ZT0iYWN0aXZlIiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPSAie2V4YWN0OiB0cnVlfSI + CisJ
CURldGFpbAorCTwvYT4KKwk8YSBbcm91dGVyTGlua109IiBbJy4vYmFycmVsJ10gIgorCQlyb3V0
ZXJMaW5rQWN0aXZlPSJhY3RpdmUiIFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109ICJ7ZXhhY3Q6
IHRydWV9Ij4KKwkJQmFycmVsCisJPC9hPgorCTxhIFtyb3V0ZXJMaW5rXT0iIFsnLi9hYm91dCdd
ICIKKwkJcm91dGVyTGlua0FjdGl2ZT0iYWN0aXZlIiBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNd
PSAie2V4YWN0OiB0cnVlfSI + CisJCUFib3V0CisJPC9hPgorPC9uYXY + CisKKzxtYWluPgorCTxh
cHAtaGVyby1mb3JtPjwvYXBwLWhlcm8tZm9ybT4KKwk8cm91dGVyLW91dGxldD48L3JvdXRlci1v
dXRsZXQ + Cis8L21haW4 + CisKKzxwcmUgY2xhc3M9ImFwcC1zdGF0ZSI + dGhpcy5zdGF0ZSQgPSB7
eyBzdGF0ZSQgfCBhc3luYyB8IGpzb24gfX08L3ByZT4KKworPGZvb3Rlcj4KKwk8c3Bhbj4KKwkJ
QW5ndWxhciBFbGVjdHJvbiBEcmVhbSBTdGFydGVyIGJ5IDxhIChjbGljayk9Im9wZW5VUkwodXJs
KSIgaHJlZj0iIyI + QENvbGluU2tvdzwvYT4KKwk8L3NwYW4 + CisJPGRpdj4KKwkJPGEgW2hyZWZd
PSJ1cmwiPgorCQkJPGltZyBbc3JjXT0iYW5ndWxhcmNsYXNzTG9nbyIgd2lkdGg9IjI1JSI + CisJ
CTwvYT4KKwk8L2Rpdj4KKzwvZm9vdGVyPgpkaWZmIC0tZ2l0IGEvc3JjL2FwcC9hcHAubW9kdWxl
LnRzIGIvc3JjL2FwcC9hcHAubW9kdWxlLnRzCmluZGV4IGZlYzI0NTcuLjFjNjEyZWIgMTAwNjQ0
Ci0tLSBhL3NyYy9hcHAvYXBwLm1vZHVsZS50cworKysgYi9zcmMvYXBwL2FwcC5tb2R1bGUudHMK
QEAgLTc3LDYgKzc3LDggQEAgaWYgKEVOViA9PT0gJ2RldmVsb3BtZW50JykgewogICBDT05ESVRJ
T05BTF9JTVBPUlRTLnB1c2goU3RvcmVNb2R1bGUuZm9yUm9vdChyZWR1Y2VycywgeyBtZXRhUmVk
dWNlcnMgfSkpOwogfQogCitpbXBvcnQgeyBIZXJvRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vaGVy
by1mb3JtLmNvbXBvbmVudCc7CisKIC8qKgogICogYEFwcE1vZHVsZWAgaXMgdGhlIG1haW4gZW50
cnkgcG9pbnQgaW50byBBbmd1bGFyMidzIGJvb3RzdHJhcGluZyBwcm9jZXNzCiAgKi8KQEAgLTg3
LDcgKzg5LDggQEAgaWYgKEVOViA9PT0gJ2RldmVsb3BtZW50JykgewogICAgIEFib3V0Q29tcG9u
ZW50LAogICAgIEhvbWVDb21wb25lbnQsCiAgICAgTm9Db250ZW50Q29tcG9uZW50LAotICAgIFhM
YXJnZURpcmVjdGl2ZQorICAgIFhMYXJnZURpcmVjdGl2ZSwKKyAgICBIZXJvRm9ybUNvbXBvbmVu
dCwKICAgXSwKICAgaW1wb3J0czogWyAvLyBpbXBvcnQgQW5ndWxhcidzIG1vZHVsZXMKICAgICBC
cm93c2VyTW9kdWxlLApkaWZmIC0tZ2l0IGEvc3JjL2FwcC9oZXJvLWZvcm0uY29tcG9uZW50Lmh0
bWwgYi9zcmMvYXBwL2hlcm8tZm9ybS5jb21wb25lbnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wZmM2YjgxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2FwcC9oZXJv
LWZvcm0uY29tcG9uZW50Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorICAgIDxkaXYgY2xhc3M9ImNv
bnRhaW5lciI + CisgICAgICA8ZGl2IFtoaWRkZW5dPSJzdWJtaXR0ZWQiPgorICAgICAgICA8aDE +
SGVybyBGb3JtPC9oMT4KKyAgICAgICAgPGZvcm0gKG5nU3VibWl0KT0ib25TdWJtaXQoKSIgI2hl
cm9Gb3JtPSJuZ0Zvcm0iPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAg
ICAgICAgICAgPGxhYmVsIGZvcj0ibmFtZSI + TmFtZTwvbGFiZWw + CisgICAgICAgICAgICA8aW5w
dXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9Im5hbWUiCisgICAgICAgICAg
ICAgICAgICAgcmVxdWlyZWQKKyAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT0ibW9kZWwu
bmFtZSIgbmFtZT0ibmFtZSIKKyAgICAgICAgICAgICAgICAgICAjbmFtZT0ibmdNb2RlbCI + Cisg
ICAgICAgICAgICA8ZGl2IFtoaWRkZW5dPSJuYW1lLnZhbGlkIHx8IG5hbWUucHJpc3RpbmUiCisg
ICAgICAgICAgICAgICAgIGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIiPgorICAgICAgICAgICAg
ICBOYW1lIGlzIHJlcXVpcmVkCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4K
KyAgICAgCisgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI + CisgICAgICAgICAgICA8
bGFiZWwgZm9yPSJhbHRlckVnbyI + QWx0ZXIgRWdvPC9sYWJlbD4KKyAgICAgICAgICAgIDxpbnB1
dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0iYWx0ZXJFZ28iCisgICAgICAg
ICAgICAgICAgICAgWyhuZ01vZGVsKV09Im1vZGVsLmFsdGVyRWdvIiBuYW1lPSJhbHRlckVnbyI +
CisgICAgICAgICAgPC9kaXY + CisgICAgIAorICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3Jv
dXAiPgorICAgICAgICAgICAgPGxhYmVsIGZvcj0icG93ZXIiPkhlcm8gUG93ZXI8L2xhYmVsPgor
ICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iZm9ybS1jb250cm9sIiBpZD0icG93ZXIiCisgICAg
ICAgICAgICAgICAgICAgIHJlcXVpcmVkCisgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCld
PSJtb2RlbC5wb3dlciIgbmFtZT0icG93ZXIiCisgICAgICAgICAgICAgICAgICAgICNwb3dlcj0i
bmdNb2RlbCI + CisgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPSJsZXQgcG93IG9mIHBvd2Vy
cyIgW3ZhbHVlXT0icG93Ij57e3Bvd319PC9vcHRpb24 + CisgICAgICAgICAgICA8L3NlbGVjdD4K
KyAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09InBvd2VyLnZhbGlkIHx8IHBvd2VyLnByaXN0aW5l
IiBjbGFzcz0iYWxlcnQgYWxlcnQtZGFuZ2VyIj4KKyAgICAgICAgICAgICAgUG93ZXIgaXMgcmVx
dWlyZWQKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorICAgICAKKyAgICAg
ICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tc3VjY2VzcyIgW2Rpc2Fi
bGVkXT0iIWhlcm9Gb3JtLmZvcm0udmFsaWQiPlN1Ym1pdDwvYnV0dG9uPgorICAgICAgICAgIDxi
dXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiAoY2xpY2spPSJuZXdI
ZXJvKCk7IGhlcm9Gb3JtLnJlc2V0KCkiPk5ldyBIZXJvPC9idXR0b24 + CisgICAgICAgIDwvZm9y
bT4KKyAgICAgIDwvZGl2PgorICAgICAKKyAgICAgIDxkaXYgW2hpZGRlbl09IiFzdWJtaXR0ZWQi
PgorICAgICAgICA8aDI + WW91IHN1Ym1pdHRlZCB0aGUgZm9sbG93aW5nOjwvaDI + CisgICAgICAg
IDxkaXYgY2xhc3M9InJvdyI + CisgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXhzLTMiPk5hbWU8
L2Rpdj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wteHMtOSAgcHVsbC1sZWZ0Ij57eyBtb2Rl
bC5uYW1lIH19PC9kaXY + CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJyb3ci
PgorICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14cy0zIj5BbHRlciBFZ288L2Rpdj4KKyAgICAg
ICAgICA8ZGl2IGNsYXNzPSJjb2wteHMtOSBwdWxsLWxlZnQiPnt7IG1vZGVsLmFsdGVyRWdvIH19
PC9kaXY + CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgorICAgICAg
ICAgIDxkaXYgY2xhc3M9ImNvbC14cy0zIj5Qb3dlcjwvZGl2PgorICAgICAgICAgIDxkaXYgY2xh
c3M9ImNvbC14cy05IHB1bGwtbGVmdCI + e3sgbW9kZWwucG93ZXIgfX08L2Rpdj4KKyAgICAgICAg
PC9kaXY + CisgICAgICAgIDxicj4KKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmlt
YXJ5IiAoY2xpY2spPSJzdWJtaXR0ZWQ9ZmFsc2UiPkVkaXQ8L2J1dHRvbj4KKyAgICAgIDwvZGl2
PgorICAgIDwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Ny
Yy9hcHAvaGVyby1mb3JtLmNvbXBvbmVudC50cyBiL3NyYy9hcHAvaGVyby1mb3JtLmNvbXBvbmVu
dC50cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjY1ZmI5Ci0tLSAvZGV2
L251bGwKKysrIGIvc3JjL2FwcC9oZXJvLWZvcm0uY29tcG9uZW50LnRzCkBAIC0wLDAgKzEsMjEg
QEAKK2ltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOworCitpbXBvcnQg
eyBIZXJvIH0gZnJvbSAnLi9oZXJvJzsKKworQENvbXBvbmVudCh7CisJc2VsZWN0b3I6ICdhcHAt
aGVyby1mb3JtJywKKwl0ZW1wbGF0ZVVybDogJy4vaGVyby1mb3JtLmNvbXBvbmVudC5odG1sJwor
fSkKK2V4cG9ydCBjbGFzcyBIZXJvRm9ybUNvbXBvbmVudCB7CisKKwlwdWJsaWMgcG93ZXJzID0g
WydSZWFsbHkgU21hcnQnLCAnU3VwZXIgRmxleGlibGUnLCAnU3VwZXIgSG90JywgJ1dlYXRoZXIg
Q2hhbmdlciddOworCXB1YmxpYyBtb2RlbCA9IG5ldyBIZXJvKDE4LCAnRHIgSVEnLCB0aGlzLnBv
d2Vyc1swXSwgJ0NodWNrIE92ZXJzdHJlZXQnKTsKKworCXB1YmxpYyBzdWJtaXR0ZWQgPSBmYWxz
ZTsKKworCXB1YmxpYyBvblN1Ym1pdCgpIHsgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlOyB9CisKKwlw
dWJsaWMgbmV3SGVybygpIHsKKwkJdGhpcy5tb2RlbCA9IG5ldyBIZXJvKDQyLCAnJywgJycpOwor
CX0KK30KZGlmZiAtLWdpdCBhL3NyYy9hcHAvaGVyby50cyBiL3NyYy9hcHAvaGVyby50cwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQ5YzkyCi0tLSAvZGV2L251bGwKKysr
IGIvc3JjL2FwcC9oZXJvLnRzCkBAIC0wLDAgKzEsOSBAQAorZXhwb3J0IGNsYXNzIEhlcm8gewor
CWNvbnN0cnVjdG9yKAorCQlwdWJsaWMgaWQ6IG51bWJlciwKKwkJcHVibGljIG5hbWU6IHN0cmlu
ZywKKwkJcHVibGljIHBvd2VyOiBzdHJpbmcsCisJCXB1YmxpYyBhbHRlckVnbz86IHN0cmluZwor
CSkgeworCX0KK30KLS0gCjIuMTMuNgoK

Я столкнулся с аналогичной проблемой. Похоже, что плагин распознает только переменные, объявленные непосредственно в классе, но не те, которые вложены в formGroup или formBuilder.
Этот код компонента выдает ошибку Squigglies в HTML для двух полей FromControl:

export class MyDetailComponent implements OnInit {
  myForm: FormGroup;
  constructor() { }
  ngOnInit() {
    this.myForm = new FormGroup({
      name: new FormControl({ value: '', disabled: true }),
      gender: new FormControl({ value: '', disabled: true })
    });
  }
}

это, с другой стороны, не дает волнистых сообщений об ошибках, поскольку я напрямую объявил FormControl в классе (к сожалению, это не решение, потому что angular не позволяет объявление formcontrol вне группы форм) -

export class MyDetailComponent implements OnInit {
  myForm: FormGroup;
  name: FormControl;
  gender: FormControl;
  constructor() { }
  ngOnInit() {
    this.myForm = new FormGroup({
      name: new FormControl({ value: '', disabled: true }),
      gender: new FormControl({ value: '', disabled: true })
    });
  }
}

Попробуйте добавить "!!".
Хотя это сложно,
Так мне удалось.

image

@hlovdal Я пробовал ваши действия по воспроизведению, но не смог
Я тестировал, используя VS Code Linux v1.20.1, Typescript 2.6.2, Angular.ng-template v0.1.9
Не могли бы вы подтвердить, существует ли проблема в Angular.ng-template v0.1.9?

@kyliau Сегодня я столкнулся с этой проблемой с VS Code v1.21.1 для Windows, Typescript 2.3.4 и Angular.ng-template v0.1.9. Вот как я создаю форму:

this.form = formBuilder.group({
      amount: ["", Validators.compose([Validators.required, SomeCustomValidator.isValid])],
      sale: [{ value: "0" }],
      amountTotal: [""],
      price: [{ value: "123" }, Validators.compose([Validators.required, SomeCustomValidator.isValid])],
      discount: [{ value: "0" }, SomeCustomValidator.isValid],
      priceAfterDiscount: [""],
      sum: [""],
      sumDph: [""]
 });

и в шаблоне я пытаюсь дотянуться до него вот так:

<ion-item [class.invalid]="!buyForm.controls.amount.valid && (buyForm.controls.amount.dirty || submitAttempt)">

получение этой ошибки:

[Angular] Identifier 'amount' is not defined. '__type' does not contain such a member

При отрицании он не вызывает ошибку (это означает, что подчеркивается только buyForm.controls.amount.dirty , а не часть !buyForm.controls.amount.valid ). Поэтому приведенное выше решение (с двойным отрицанием) работает.

Я много лет искал обходной путь - спасибо

@guhyeon, спасибо, но не могли бы вы объяснить, что это значит?

@rubenheymans
Ну ... я не так много знаю.
Я думаю, что это проблема компилятора типового скрипта.
Это средство, которое я узнал случайно.

Вместо этого я попытался использовать этот обходной путь, который также мешает службе языка vscode Angular жаловаться:

password.hasError('required') с использованием валидатора Validators.required для пароля FormControl

AbstractControl.hasError() требует значение errorCode, которое я получил, отображая свойство AbstractControl.errors на экране для отладки

{{password.errors | json}} , в результате получается: { "required": true }

Для известных кодов ошибок, а также для пользовательских валидаторов, вероятно, могут быть доступны дополнительные типы ввода.

image

У меня такая же проблема с компилятором машинописного текста.

image
image
То же, что @ ajaysake1992

Я думаю, что под капотом это та же проблема, что и # 149 - ссылка на объект с индексной подписью по индексу ( control?.errors['required'] ) работает, но ссылка с точечной нотацией ( control?.errors.required ) ошибочна отмечен как неправильный.

Я получил это сегодня с помощью простого где слово "поиск" было неопределенным и давало мне красные волнистые линии.
Приложение скомпилировано и работало, как задумано (к моему разочарованию после того, как я потратил полдня на то, чтобы решить проблему перед запуском ...)
Для меня это похоже на ошибку vscode?

Вот мое решение, если вам не нравится "!!" на html.

your.component.ts:

получить emailFormControl (): any {
вернуть this.formGroupName.get ('электронная почта');
}

your.component.html:

Введите, пожалуйста, действительный адрес электронной почты.

Это решение работает для меня без каких-либо ошибок компиляции / ошибок времени выполнения.

Это сработало для меня:
В строке, где вы отмечаете ошибку, я поставил пробел перед закрытием тега (>), и ошибка исчезла.
Я удалил созданное пространство и все было нормально, без ошибок.

Тоже испытываю точно такую ​​же проблему. Элементы управления FormGroup, созданные в FormBuilder, не известны intellisense VSCode для шаблона представления. Любая идея, есть ли для этого реальное исправление, а не !! обходной путь

Для доступа к имени свойства можно использовать квадратную скобку вместо оператора точки. Это может исправить вашу ошибку компиляции.
Пример - * ngIf = "price.errors [обязательно]"

Ух ты, скобки решают красное. Я могу подтвердить, что это эпизодически.
Я использую Angular: 7.2.15 , typescript: 3.1.6 и VSC 1.35.1 .
Screen Shot 2019-06-29 at 10 28 28 AM

Это все еще происходит с Angular 8.1.3, с настраиваемыми и встроенными валидаторами форм (например, обязательными). Было бы здорово, если бы зарегистрированные валидаторы были понятны для intellisense. Запуск VSC 1.36.1.

Обходной путь: используйте аннотацию скобками вместо аннотации точки или используйте !! formcontrol.errors.required

Обходной путь заставляет меня задуматься, может ли intellisense отметить это из-за неопределенного значения? Поскольку объект ошибок не является набором истинных / ложных флагов, а определяется существованием указанных флагов (что является необычным шаблоном IMO), я могу представить, что у intellisense есть проблемы с этим.

@ivanwonder уже создали пиар для этого номера. Так что подождем, пока они его объединят.

Обходной путь:

Вместо:

formGroup.errors?.customValidator

использовать:

formGroup.errors && formGroup.errors['customValidator']

Я рад, что есть обходной путь ... но был ли достигнут прогресс в изучении проблемы?
Я уверен, что многие из нас предпочитают простую запись через точку.

Эта проблема все еще существует в v0.802.3

Эта проблема была автоматически заблокирована из-за бездействия.
Сообщите о новой проблеме, если вы столкнулись с аналогичной или связанной проблемой.

Узнайте больше о нашей политике автоматической блокировки разговоров .

_Это действие было выполнено автоматически ботом. _

Была ли эта страница полезной?
0 / 5 - 0 рейтинги