我是打字稿的新手,我正在尝试为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()
}
}
答案 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 {
}