Vscode-ng-language-service: рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡реЛрдВ рдореЗрдВ рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб рдХреА рдкрд╣рдЪрд╛рди рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдЕрдЧре░ 2020  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: angular/vscode-ng-language-service

рдмрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ

рдЬрдм рдШрдЯрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рдзреЗрдп (рдЯрд╛рдЗрдк рдЧрд╛рд░реНрдб) рджреЗрддрд╛ рд╣реИ, рддреЛ рд╕рдВрдкрд╛рджрдХ рдПрдХ рд▓рд╛рдкрддрд╛ рдлрд╝реАрд▓реНрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рдлрд╝реАрд▓реНрдб рд╣реЛ рдФрд░ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реЛ (рдХреЛрдгреАрдп 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>

рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ (рдХрдо рд╕реЗ рдХрдо {{ }} рдЕрдВрджрд░ рдмрдирд╛рдордХреЛрдб рдореЗрдВ рд╣реЛрд╡рд░ рдЯреВрд▓рдЯрд┐рдк item рдЕрдВрджрд░) any

рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп, рдкреНрд░рдХрд╛рд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ ExampleValue

рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЖрдЧрд╛рдореА рдЖрдЗрд╡реА-рдореВрд▓ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рджреЗрдЦреЗрдВ https://github.com/angular/vscode-ng-language-service/issues/335#issuecomment-693545000), рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рдЬрд┐рд╕рдХреА рд╣рдо рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рд╡рд░реНрддрдорд╛рди рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдкрд╣рд▓реЗ рдареАрдХ рдХрд░реЗрдВ

рдЬреИрд╕рд╛ рдХрд┐ рдЕрдпрд╛рдЬрд╝ рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕реЗ рдирдИ рднрд╛рд╖рд╛ рд╕реЗрд╡рд╛ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдСрдкреНрдЯ-рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ v11.1 рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
image

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕