Vscode-ng-language-service: Π—Π°Ρ‰ΠΈΡ‚Π° Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ распознаСтся Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… элСмСнтах

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 4 Π°Π²Π³. 2020  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: angular/vscode-ng-language-service

ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ

Когда ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ Ρ‚ΠΈΠΏΠ° (Π·Π°Ρ‰ΠΈΡ‚Π° Ρ‚ΠΈΠΏΠ°), Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠ»Π΅ΠΌ, Π΄Π°ΠΆΠ΅ Ссли ΠΏΠΎΠ»Π΅ Π΅ΡΡ‚ΡŒ ΠΈ ΠΊΠΎΠ΄ компилируСтся (Angular v8.2).

Π’ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ…Ρ€Π°Π½Π½ΠΈΠΊ Ρ‚ΠΈΠΏΠ° Π² *ngIf . ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ ΠΈΠ· интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСтся ΠΈΠΌ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… элСмСнтах.

// my-model.model.ts
type MyModel = (MyModelA | MyModelB) & { type: 'A' | 'B' };
interface MyModelA {  
  fieldA: any;
}
interface MyModelB {
  fieldB: any;
}
// foo.component.ts
public model: MyModel;
public isModelA(model): model is MyModelA {
  return model.type === 'A';
}

// foo.component.html


md5-1956e8def7f34e35cec69338ae3e15c2


ОТидаСмоС повСдСниС

Π’ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ошибки Π½Π΅Ρ‚.

ВсС 3 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΡ…Ρ€Π°Π½Π½ΠΈΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ контСкстам Π² языковой слуТбС (ΠΎΠ½ΠΈ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ врСмя компиляции, ΠΊΠ°ΠΊ ΠΈ это)

export class NgLetContext<T = any> {
  // allows syntax "foo; let bar"
  $implicit: T = null!;
  // allows syntax "foo as bar"
  ngLet: T = null!;
}
@Directive({
  selector: '[ngLet]',
})
export class NgLetDirective<T> implements OnInit {
  @Input()
  set ngLet(value: T) {
    this.context.$implicit = this.context.ngLet = value;
  }

  constructor(private containerRef: ViewContainerRef, private templateRef: TemplateRef<NgLetContext>) {}
  private context = new NgLetContext<T>();

  static ngTemplateContextGuard<T>(dir: NgLetDirective<T>, ctx: unknown): ctx is NgLetContext<T> {
    return true;
  }

  ngOnInit() {
    this.containerRef.createEmbeddedView(this.templateRef, this.context);
  }
}
interface MyModel  { baz: ExampleValue }
// foo.component.ts
public model: MyModel;
<div *ngLet="model.baz as item">
   {{ item }}
</div>

Π’ Ρ‚ΠΈΠΏΠ΅ языковой слуТбы (Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π°Ρ подсказка Π² vscode Π½Π°Π΄ item Π²Π½ΡƒΡ‚Ρ€ΠΈ {{ }} ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅) составляСт any

ΠŸΡ€ΠΈ компиляции Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ExampleValue

Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ исправлСно Π² грядущСй языковой слуТбС Ivy (см. Https://github.com/angular/vscode-ng-language-service/issues/335#issuecomment-693545000), Π½ΠΎ Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈΠ·-Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, присущих Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языковой слуТбы.

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Аяз, это Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π² Π½ΠΎΠ²ΠΎΠΉ языковой слуТбС, которая Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° Π² вСрсии 11.1 Π² качСствС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² настройках Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ:
image

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ