对打字稿模块感到困惑
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()
注意:您不能在同一模块上使用 default
和 export =
。
我有模块文件:
// 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()
注意:您不能在同一模块上使用 default
和 export =
。