对打字稿模块感到困惑

confused about typescript modules

我有模块文件:

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

当您使用 import * as Class from './class' 时,您要求导入将所有导出的绑定从模块中提取到您当前的代码文件中,并将其映射到 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'

您的问题在这里:

module.exports = MyClass

它会覆盖您的默认导出。

将此代码用于 class.ts

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

然后,使用它:

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

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