我正在使用此plunk中的click-outside指令 - > http://embed.plnkr.co/v7BMUv/
我的TS编译器抛出以下错误:
TS2322:类型'订阅'不能分配给'Observable'类型。 “订阅”类型中缺少“_isScalar”属性。
TS2339属性'unsubscribe'在'Observable'类型中不存在。
我的tsconfig.json:
{
"compileOnSave": false,
"compilerOptions": {
"target": "es6",
"module": "system",
"moduleResolution": "node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": false,
"suppressImplicitAnyIndexErrors": true,
"noImplicitAny": false,
"noEmitOnError": false
},
"exclude": [
"node_modules",
"wwwroot"
]
}
导致错误的代码:
ngOnInit() {
this.globalClick = Observable
.fromEvent(document, 'click')
.delay(1)
.do(() => {
this.listening = true;
}).subscribe((event:MouseEvent) => {
this.onGlobalClick(event);
});
}
如何克服此错误?
答案 0 :(得分:9)
错误在click-outside.directive.ts
。 Observable.subscribe
返回Subscription
(ngOnInit
),而不是Observable
。因此,private globalClick
的类型应为Subscription
。
当删除类型时,它可以正常工作,并且因为plunker没有显示它工作的类型错误,但是当使用tsc
进行编译时,它会在您尝试分配{{1}时出错对象为Subscription
。