web-dev-qa-db-fra.com

angular 2 TypeScript Une implémentation ne peut pas être déclarée dans des contextes ambiants

Je suis nouveau sur TypeScript et j'essaye de créer une fonction pour une directive angular 2. Quelqu'un peut-il expliquer, en langage pour n00bs, ce que l'erreur essaie de me dire quand je compile avec Gorgée?

Une implémentation ne peut pas être déclarée dans des contextes ambiants

Le message s'applique à offset() et toggler().

import { Directive, ElementRef, Input } from '@angular/core';

@Directive({
  selector: 'offCanvas',
  inputs: ['target', 'toggle', 'placement', 'autohide', 'recalc', 'disableScrolling', 'modal', 'canvas', 'exclude'],
  Host: {
    '(click)': 'Click()'
  }
})

export class OffCanvas {  
  @Input('target') target: string;
  @Input('canvas') canvas: string;
  @Input('state') state: string;
  @Input('exclude') exclude: string;
  @Input('placement') placement: string;
  @Input('toggle') toggle: boolean;
  @Input('autohide') autohide: boolean;
  @Input('recalc') recalc: boolean;
  @Input('disableScrolling') disableScrolling: boolean;
  @Input('modal') modal: boolean;

  public offset() {
    switch (this.placement) {
      case 'left':
      case 'right':  return (<HTMLElement>document.querySelector(this.target)).offsetWidth
      case 'top':
      case 'bottom': return (<HTMLElement>document.querySelector(this.target)).offsetHeight
    }
  }

  public toggler() {
    if (this.state === 'slide-in' || this.state === 'slide-out') return
    this[this.state === 'slid' ? 'hide' : 'show']()
  }

  Click() {
    this.toggler()
  }
}
11
poashoas

Une implémentation ne peut pas être déclarée dans des contextes ambiants

Vous avez probablement votre fichier nommé foo.d.ts au lieu de foo.ts. Cela le marque comme un fichier de déclaration (plus à ce sujet https://basarat.gitbooks.io/TypeScript/content/docs/types/ambient/d.ts.html ) et vous ne pouvez pas mettre logique dans ces derniers comme vous êtes déclarant quelle logique existe ailleurs.

22
basarat

Je l'ai corrigé en faisant: npm install rxjs

8
Rob Lassche

Je pense que cela m'est arrivé, car j'ai accidentellement modifié l'un des fichiers dans node_modules. Cela m'a corrigé:

rm -r node_modules
npm install
3
LexieHankins

erreur TS1183: Une implémentation ne peut pas être déclarée dans des contextes ambiants. Solution: module de nœud supprimé et réinstallez-le.

1
Nizam Khan

J'ai eu la même erreur et l'ai corrigée en tapant:

npm install --save TypeScript@latest

package.json a maintenant la dernière version de ts et le compilateur ts est 2.2.2.

1
Nikhil Dinesh