2016-12-21 46 views
2

我使用的點擊之外的指令從這個普拉克 - >http://embed.plnkr.co/v7BMUv/角2 - 打字稿:TS2322:類型「認購」是不能分配給輸入「可觀察<MouseEvent>」

我的TS編譯器拋出下面的錯誤:

TS2322:類型「訂閱」不可分配爲鍵入'Observable'。 「訂閱」類型中缺少屬性'_isScalar'。

TS2339'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

此錯誤與TypeScript的靜態代碼分析有關。粘貼導致此錯誤的代碼。 – martin

+0

編輯添加代碼 –

回答

7

錯誤發生在click-outside.directive.tsObservable.subscribe返回Subscription(在ngOnInit),而不是另一個Observable。因此,private globalClick的類型應該是Subscription

它適用於刪除類型時,以及作爲plunker不顯示類型錯誤它的工作,但與tsc編譯時,它會錯誤,因爲你試圖將一個Subscription對象指定Observable

+0

感謝Ionut。這工作。 –

相關問題