module.exports i Loggfila

stemmer
54

gjør noen vet hvordan du gjør et module.exports?

Jeg prøvde noen forskjellige måter ender opp med

export class Greeter {}

som vil kompilere til

exports.Greeter = Greeter;

Men det jeg egentlig ønsker er dette:

exports = Greeter;

Slik at jeg kan bruke det slik:

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

og ikke

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

Er dette mulig med typescript?

Publisert på 02/10/2012 klokken 18:40
kilden bruker
På andre språk...                            


6 svar

stemmer
37

Du kan eksportere en enkelt klasse i Loggfila som dette:

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;

Og her er hvordan det kommer til å bli brukt:

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

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

console.log(name); // Homer Simpson

For å være komplett, her er min tsconfig.json (jeg bruker Loggfila v2.0.3):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}
Svarte 01/11/2016 kl. 09:48
kilden bruker

stemmer
19

Dette er nå gjennomført og er klar i Loggfila 0,9 :)

Svarte 28/06/2013 kl. 11:42
kilden bruker

stemmer
11

Ikke noe. Dette er en begrensning i maskinskrevet manuskript, og en begrensning i strømmen strå-menneske-modulen spesifikasjon til behandling ECMA som maskinskrevet manuskript er bygget opp etter.

Dette ville være et godt forslag for å gjøre på CodePlex.

Svarte 02/10/2012 kl. 20:20
kilden bruker

stemmer
7

Så jeg tror jeg har funnet en midlertidig løsning. Bare pakk søkeordet 'modul' i parentes i Ts filen:

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

Den genererte javascript-filen vil være nøyaktig den samme:

(module).exports = MyClass;

Merk, bedre enn å erklære Var modulen selv, laste ned node.d.ts definisjonsfilen og stikke den i samme katalog som loggfila. Her er en komplett utvalg av en uttrykkelig node.js routing-fil som foruts node.d.ts er i samme katalog:

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

Jeg kan da nye opp en SheetController og (med ekspress) tildeler visningen metoden:

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

Jeg antar at et søkeord kan rømte ved hjelp av dette mønsteret:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;
Svarte 31/12/2012 kl. 06:09
kilden bruker

stemmer
2

Det er stygt og Hacky, men du kan fortsatt gjøre:

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

Som kompilerer inn:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;
Svarte 05/10/2012 kl. 18:42
kilden bruker

Svarte 09/10/2012 kl. 02:58
kilden bruker

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