2017-02-07 1 views
0

i have fichier de module:confus au sujet de modules dactylographiées

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

quand j'importer cela dans Node.js, cela fonctionne:

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

mais lorsque je tente d'utiliser ce dactylographiée:

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

Répondre

0

Votre problème est ici:

module.exports = MyClass 

Il écrase votre exportation par défaut.

Utilisez ce code pour class.ts:

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

Ensuite, pour l'utiliser:

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

Avis: Vous ne pouvez pas utiliser default et export = sur le même module.

0

Lorsque vous utilisez import * as Class from './class', vous demandez à l'importation de retirer tous a exporté les liaisons du module dans votre fichier de code actuel et l'a mappé à Class. Donc, dans votre exemple, la vraie classe que vous essayez de référencer devrait être Class.Class à la place parce que vous avez * mappé à Class. Donc, ce qui suit devrait travailler dans votre exemple:

const a = new Class.Class() 

Voir: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import pour plus de détails

Depuis que vous essayez simplement d'utiliser la classe, le code suivant serait plus approprié (que vous avez déjà noté travaille):

import Class from './class'