module.exports à tapuscrit

voix
48

quelqu'un peut-il savoir comment faire un module.exports?

J'ai essayé quelques différentes façons de se retrouver avec

export class Greeter {}

qui compilera à

exports.Greeter = Greeter;

Mais ce que je veux vraiment est la suivante:

exports = Greeter;

Alors que je peux l'utiliser comme ceci:

import Greeter = module(Greeter);
var greeter = new Greeter();

et pas

import Greeter = module(Greeter);
var greeter = new Greeter.Greeter();

Est-ce possible avec Tapuscrit?

Créé 02/10/2012 à 19:40
source utilisateur
Dans d'autres langues...                            


6 réponses

voix
25

Vous pouvez exporter une seule classe dactylographiée comme ceci:

class Person {

  private firstName: string;
  private lastName: string;

  constructor(firstName: string, lastName: string) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  public getFullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}

export = Person;

Et voici comment il va être utilisé:

var Person = require('./dist/commonjs/Person.js');

var homer = new Person('Homer', 'Simpson');
var name = homer.getFullName();

console.log(name); // Homer Simpson

Pour être complet, voici mon tsconfig.json (je me sers tapuscrit v2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
Créé 01/11/2016 à 09:48
source utilisateur

voix
19

Cela a été mis en place et est prêt dactylographiée 0.9 :)

Créé 28/06/2013 à 12:42
source utilisateur

voix
11

Actuellement non. Ceci est une limitation dactylographiée et une limitation dans la spécification actuelle du module paille de considérer l'homme par l'ECMA qui tapuscrit est calquée.

Ce serait une grande suggestion à faire sur CodePlex.

Créé 02/10/2012 à 21:20
source utilisateur

voix
7

Donc, je pense que je l'ai trouvé une solution de contournement. Il suffit de terminer le mot-clé « module » entre parenthèses dans votre fichier .ts:

declare var module: any;
(module).exports = MyClass;

Le fichier javascript généré sera exactement la même chose:

(module).exports = MyClass;

Remarque, mieux que déclarer module var vous, téléchargez le fichier de définition de node.d.ts et le coller dans le même répertoire que votre fichier dactylographiée. Voici un échantillon complet d'un express Node.js fichier de routage qui suppose node.d.ts est dans le même répertoire:

/// <reference path="node.d.ts" />
var SheetController = function () {
    this.view = function (req, res) {
        res.render('view-sheet');
    };
};
(module).exports = SheetController;

Je peux alors de nouvelles un SheetController et (en utilisant express) affecter la méthode d'affichage:

var sheetController = new SheetController();
app.get('/sheet/view', sheetController.view);

Je suppose un mot clé peut être échappé avec ce modèle:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
Créé 31/12/2012 à 07:09
source utilisateur

voix
2

Il est laid et hacky, mais vous pouvez toujours le faire:

class Greeter {}
declare var exports:any;
exports = Greeter;

Qui compile en:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Créé 05/10/2012 à 19:42
source utilisateur

voix
-1

essayez ce modèle d'application boilerplate https://github.com/ntheile/TypeScript-Backbone-Require-Boilerplate

Créé 09/10/2012 à 03:58
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more