我有模块文件:
// 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 :(得分: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()
注意:您不能在同一模块上使用default
和export =
。