মডিউল.এক্সপোর্টগুলি টাইপ স্ক্রিপ্টে


85

কেউ কি জানেন যে কীভাবে একটি মডিউল.এক্সপোর্টগুলি করতে হয়?

আমি শেষ পর্যন্ত কিছু ভিন্ন উপায় চেষ্টা করেছি

export class Greeter {}

যা সংকলন করবে

exports.Greeter = Greeter;

তবে আমি যা চাই তা হ'ল:

exports = Greeter;

যাতে আমি এটি এর মতো ব্যবহার করতে পারি:

import { Greeter } from "greeter";

const greeter = new Greeter();

এবং না

import { Greeter } from "greeter";

const greeter = new Greeter.Greeter();

টাইপস্ক্রিপ্ট দিয়ে এটি কি সম্ভব?

উত্তর:


78

আপনি টাইপস্ক্রিপ্টে এই জাতীয় একটি ক্লাস রফতানি করতে পারেন:

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;

এবং এটি এখানে কীভাবে ব্যবহৃত হবে তা এখানে:

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

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

console.log(name); // Homer Simpson

সম্পূর্ণ হওয়ার জন্য, এখানে আমার tsconfig.json (আমি টাইপস্ক্রিপ্ট v2.0.3 ব্যবহার করছি):

{
  "compilerOptions": {
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "dist/commonjs",
    "rootDir": "src/ts",
    "target": "es5"
  },
  "exclude": [
    "dist",
    "node_modules"
  ]
}

অনেক ধন্যবাদ! আমি ভাবছি কেন টাইপ স্ক্রিপ্ট রফতান ব্যক্তি বাস্তবায়ন করেনি ... ব্লে ব্লে ব্লে? আমি মনে করি এটি যৌক্তিক হবে, না? নাকি আমি কিছু মিস করছি?
আর্সেন এমকিটচায়ান

4
ফাইল থেকে এখনও কিছু টাইপ রফতানি করা সম্ভব? পরীক্ষাগুলি লেখার জন্য আপনি ফাইল থেকে টাইপগুলি পেতে চাইতে পারেন, তবে module.exportsশেষ পর্যন্ত একটিটি চান ।
এরিক বুরেল

21

এটি এখন প্রয়োগ করা হয়েছে এবং টাইপস্ক্রিপ্ট 0.9 :) এ প্রস্তুত


10
স্পষ্টতার জন্য (যেহেতু আমাকে এটি খনন করতে হবে), 0.9-র সিনট্যাক্সটি এখানে পাওয়া যায়: ব্লগস.এমএসএনএন / বি / টাইপসক্রিপ্ট / আর্কাইভ / ২০১ive / 06/18 / ("রফতানি =" এর অধীনে)।
ড্যান

4
এবং আরও স্পষ্টতার জন্য, ভবিষ্যতের পাঠকদের জন্য, এটি ALMOST ঠিক যেমনটি অনুরোধকারী পছন্দ করেছে তেমনভাবে প্রয়োগ করা হয়েছে । । । তবে আমি সত্যিই যা চাই তা হ'ল এটিই export = Greeter; আপনি যা করেন :)
বাইনারি ওয়ারিয়ার

4
আমি কেবল একটি কনফিগার অবজেক্টটি প্রকাশ config/db.tsকরতে এবং অ্যাপ্লিকেশনটিতে সেই কনফিগারেশনটি ব্যবহার করতে চেয়েছিলাম । টাইপস্ক্রিপ্ট ১.৪ এ আমি এটিই সফলভাবে করতে পেরেছিলাম: config/db.tsলিখিতভাবে var config = {connStr:'postgres://user:pass@host/dbname'}; export = config;এবং app.tsএটিকে হিসাবে উল্লেখ করুনimport dbConfig = require('./config/db'); dbConnect(dbConfig.connStr);
গুরজিৎ সিং

10

সুতরাং আমি মনে করি যে আমি একটি সন্ধান পেয়েছি। আপনার .ts ফাইলে বন্ধনীতে কেবল 'মডিউল' শব্দটি মোড়ানো:

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

উত্পন্ন জাভাস্ক্রিপ্ট ফাইলটি একই রকম হবে:

(module).exports = MyClass;

দ্রষ্টব্য, ভেরি মডিউলটি নিজেই ঘোষণার চেয়ে আরও ভাল, নোড.ড.টিস সংজ্ঞা ফাইলটি ডাউনলোড করুন এবং আপনার টাইপ স্ক্রিপ্ট ফাইলের মতো একই ডিরেক্টরিতে আটকে দিন। এখানে একটি এক্সপ্রেস নোড.জেএস রুটিং ফাইলের একটি সম্পূর্ণ নমুনা রয়েছে যা ধরে নেয় যে নোড.ড.টিস একই ডিরেক্টরিতে রয়েছে:

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

তারপরে আমি একটি শীটকন্ট্রোলার নতুন করতে পারি এবং (এক্সপ্রেস ব্যবহার করে) দর্শন পদ্ধতিটি নির্ধারণ করতে পারি:

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

আমি অনুমান করি যে কোনও কীওয়ার্ড এই প্যাটার্নটি ব্যবহার করে পালাতে পারে:

declare var reservedkeyword: any;
(reservedkeyword).anything = something;

2

এটি কুরুচিপূর্ণ এবং হ্যাকি তবে আপনি এখনও এটি করতে পারেন:

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

যা এতে সংকলন করে:

var Greeter = (function () {
    function Greeter() { }
    return Greeter;
})();
exports = Greeter;

4
দুর্ভাগ্যক্রমে টাইপস্ক্রিপ্ট সংকলকটি এটি ভালভাবে পরিচালনা করছে বলে মনে হয় না। উদাহরণস্বরূপ আপনি যখন এটি করেন তখন আপনি ক্লাস থেকে উদ্ভূত হতে পারবেন না।
dcstraw

কিভাবে এই কাজ করবে? কমনজেস বনাম এএমডি নিয়ে এটিই পুরো যুক্তি নয়। সাধারণ যে রফতান পরিবর্তনশীল হিসাবে সরাসরি জিনিস ফেরত সমর্থন করে না?
জর্জ মাউয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.