angular 2 typescript无法在环境上下文中声明实现

时间:2016-05-25 22:10:33

标签: angular typescript directive

我是打字稿的新手,我正在尝试为angular 2指令创建一个函数。 任何人都可以用n00bs的语言解释当我用Gulp编译时错误试图告诉我什么?

  

无法在环境上下文中声明实现

该邮件适用于offset()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()
  }
}

6 个答案:

答案 0 :(得分:19)

  

无法在环境上下文中声明实现

您最有可能将文件命名为foo.d.ts而不是foo.ts。这标志着它作为一个声明文件(更多关于那个https://basarat.gitbooks.io/typescript/content/docs/types/ambient/d.ts.html),你不能把逻辑放在这些中,因为你声明其他地方存在什么逻辑。

答案 1 :(得分:7)

我通过以下方式修复了它: npm安装rxjs

答案 2 :(得分:3)

我认为这是发生在我身上的,因为我不小心编辑了node_modules中的一个文件。这对我来说是固定的:

Vector2

答案 3 :(得分:1)

我遇到了同样的错误并通过输入以下内容修复了它:

npm install --save typescript@latest

package.json现在有最新的ts版本,ts编译器是2.2.2。

答案 4 :(得分:1)

错误TS1183:无法在环境上下文中声明实现。 解决方案:删除节点模块并重新安装。

答案 5 :(得分:0)

我遇到了这个非常不寻常的编译时Typescript错误error TS1183: An implementation cannot be declared in ambient contexts.

它是在我复制/粘贴具有export declare class的某些源代码之后开始的。我注意到将其更改为export class时此错误消失了。

更改此项:

export declare class Foo {
}

为此:

export class Foo {
}