2017-02-07 148 views
0

我有模塊文件:困惑打字稿模塊

// class.ts 
export default class MyClass {} 
module.exports = MyClass // for importing in node.js withous require('./module').default 

當我輸入這node.js中,它的工作原理:

// class-user.js 
const Class = require('./class') 
const a = new Class() // alright 

但是當我嘗試在打字稿使用此:

// class-user.ts 
import Class from './class' 
// class === undefined 

// but 

import * as Class from './class' 
const a = new Class() 
// a is instance of Class, but 
// [ts] Cannot use 'new' with an expression whose type lacks a call or construct signature. 

回答

0

你的問題是在這裏:

module.exports = MyClass 

它會覆蓋您的默認導出。

使用此代碼class.ts

// class.ts 
class MyClass {} 
export = MyClass 

然後,要使用它:

// class-user.ts 
import * as Class from './class' 
const a = new Class() 

注意:不能在同一模塊上使用defaultexport =

0

當您使用import * as Class from './class'您要求導入拉全部將模塊中的綁定導出到當前代碼文件中,並將其映射到Class。因此,在您的示例中,您嘗試引用的真實課程應爲Class.Class,因爲您已*映射到Class。所以下面應該在你的工作,例如:

const a = new Class.Class() 

參見:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import更多細節

既然你試圖簡單地用類,下面的代碼會更合適(因爲你已經注意到在工作):

import Class from './class'