困惑的打字稿模块

时间:2017-02-07 15:45:14

标签: typescript module commonjs

我有模块文件:

// 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.

2 个答案:

答案 0 :(得分: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

由于您只是尝试使用Class,因此以下代码更合适(正如您已经注意到的那样):

import Class from './class'

答案 1 :(得分: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 =