2017-02-24 119 views
2

與TS玩耍,結果被卡在這個打字稿CommonJS的繼承

"use strict"; 

declare const require: any; 

const EventEmitter : any = require('events').EventEmitter; 

class Foo extends EventEmitter{ //*error* Type 'any' is not a constructor function type. 

    constructor() { 
     super(); 
    } 
} 

我也試圖分配EventEmitter礦的接口類型,這給了同樣的錯誤。

如何擴展一個類,使用Typescript的commonjs模塊?

謝謝

回答

3

嘗試

"use strict"; 

import { EventEmitter } from 'events'; 

class Foo extends EventEmitter { 
    constructor() { 
     super(); 
    } 
} 

您可能需要安裝類型定義 '事件' 模塊:

npm install --save @types/node


更新

你仍然可以做同樣的require

"use strict"; 

import events = require('events'); 
const EventEmitter = events.EventEmitter; 

class Foo extends EventEmitter { 
    constructor() { 
     super(); 
    } 
} 

應避免在一般使用: any所以你可以使用的功能,如智能感知和編譯時類型檢查

+1

偉大的答案。也許添加一個筆記,說明爲什麼在這種情況下使用任何錯誤,一般情況不好? –

+0

非常感謝! 我真的很喜歡這種方法,但只是爲了完成,'require'解決方案也可以使用諸如'node.d.ts'之類的東西,就像這裏提到的那樣 http://stackoverflow.com/questions/18378503/importing- node-modules-with-typescript – xhallix

+0

@xhallix是的,你可以。我剛剛更新了答案。 –