আমি অন্যান্য টাইপস্ক্রিপ্ট ফাইলগুলি কীভাবে আমদানি করব?


164

Vs.net এর জন্য টাইপস্ক্রিপ্ট প্লাগইন ব্যবহার করার সময়, আমি কীভাবে অন্য টাইপস্ক্রিপ্ট ফাইলগুলিতে ঘোষিত একটি টাইপস্ক্রিপ্ট ফাইল আমদানি মডিউল তৈরি করব?

ফাইল 1:

module moo
{
    export class foo .....
}

ফাইল 2:

//what goes here?

class bar extends moo.foo
{
}

উত্তর:


202

টাইপস্ক্রিপ্ট সংস্করণ 1.8 থেকে importআপনি ES6 এর মতো সাধারণ বিবৃতি ব্যবহার করতে পারেন :

import { ZipCodeValidator } from "./ZipCodeValidator";

let myValidator = new ZipCodeValidator();

https://www.typescriptlang.org/docs/handbook/modules.html

পুরানো উত্তর: টাইপস্ক্রিপ্ট সংস্করণ 1.5 থেকে আপনি ব্যবহার করতে পারেন tsconfig.json: http://www.tyypecriptlang.org/docs/handbook/tsconfig-json.html

এটি মন্তব্য শৈলীর রেফারেন্সিংয়ের প্রয়োজনীয়তা সম্পূর্ণভাবে সরিয়ে দেয়।

পুরানো উত্তর:

আপনার বর্তমান ফাইলের শীর্ষে ফাইলটি উল্লেখ করতে হবে।

আপনি এটি এইভাবে করতে পারেন:

/// <reference path="../typings/jquery.d.ts"/>
/// <reference path="components/someclass.ts"/>

class Foo { }

প্রভৃতি

এই পাথগুলি বর্তমান ফাইলের সাথে সম্পর্কিত।

আপনার উদাহরণ:

/// <reference path="moo.ts"/>

class bar extends moo.foo
{
}

1
এটি ঠিকঠাক কাজ করে, যাইহোক, আমি কোডটি জেএসে সংকলন করার সময়। বাহ্যিক ফাইলগুলিতে কোনও "আবশ্যক" বা কোনও ধরণের লিঙ্ক নেই ... অন্য উদাহরণগুলিতে আমি যা দেখতে পাচ্ছি তার থেকে আমার একটি "আমদানি মু = মডিউল" ("মু") করা উচিত; তবে এটি অভিযোগ করে যে সেখানে আছে বর্তমান সুযোগে কোন গতি নেই
— রজার জোহানসন

2
হ্যাঁ, referenceকোনও জেএস কোড তৈরি করে না যা সংকলনের পরে সেই জেএস লোড করে। এটি কেবল সংকলকের জন্য। আমার কাছে টাইপস্ক্রিপ্ট এবং এএমডি এর অভিজ্ঞতা নেই কারণ আমি কেবল উত্পন্ন জেএস ফাইলগুলি বান্ডিল করি যাতে আমার যা কিছু প্রয়োজন সেখানে থাকে। তবে আমি আপনাকে যা দেখছি তা দেখতে পাচ্ছি এবং আপনি সে সম্পর্কে এখানে আরও পড়তে পারেন: ধরণ 75 (পৃষ্ঠা 9) at পুরো স্পেসিফিকেশনটি পড়ার জন্য বিটিডব্লিউ, এটি অন্যান্য ভাষার তুলনায় তুলনামূলকভাবে কম।
— পিটার পোরফি

3
আপনি --allআপনার মূল .ts ফাইলে টিএসসি সহ পতাকাটি ব্যবহার করতে পারেন । সব আপনার অবগতির ট্যাগ উপর ভিত্তি করে নির্ভরতা কম্পাইলার পরিসংখ্যান এবং সমগ্র অ্যাপ্লিকেশনের জন্য একটি একক আউটপুট .js ফাইল উত্পন্ন:tsc --out app.js main.ts
— নাল

@ পিটারপোর্ফিতে কোনও উপায় আছে যে আমরা টি 4 এমভিসি ব্যবহার করে দৃ links়তার সাথে প্রবন্ধের লিঙ্কগুলি টাইপ করতে পারি
— মার্ক ম্যাকনিল বাইকিও

মনে রাখবেন যদি টাইপ করা বিষয় জেনারেট করতে বলা হয় es2015(বা esnext) মডিউল, ইন ফাইল এক্সটেনশন উল্লেখ importবিবৃতি হল বাধ্যতামূলক (যদি না আপনি কি এই )। টাইপস্ক্রিপ্ট আপনার জন্য এক্সটেনশন যুক্ত করবে না। এছাড়াও, এই মুহুর্তে, এটি আউটপুট দিতে পারে না .mjs, যাতে এক্সটেনশন হওয়া দরকার .js।
— ড্যান ড্যাসক্লেস্কু

83

টাইপস্ক্রিপ্ট দুটি বিভিন্ন ধরণের মডিউলকে পৃথক করে: অভ্যন্তরীণ মডিউলগুলি আপনার কোডটি অভ্যন্তরীণ কাঠামোর জন্য ব্যবহার করা হয়। সংকলনের সময়, আপনাকে রেফারেন্স পাথগুলি ব্যবহার করে অভ্যন্তরীণ মডিউলগুলি স্কোপে আনতে হবে:

/// <reference path='moo.ts'/>

class bar extends moo.foo {
}

অন্যদিকে, বহিরাগত মডিউলগুলি বহিরাগত উত্স ফাইলগুলিকে পুনর্জ্জাণ করতে ব্যবহৃত হয় যা রানটাইম এ কমনজেএস বা এএমডি ব্যবহার করে লোড করতে হয় । আপনার ক্ষেত্রে, বাহ্যিক মডিউল লোড ব্যবহার করতে আপনাকে নিম্নলিখিতগুলি করতে হবে:

moo.ts

export class foo {
    test: number;
} 

app.ts

import moo = module('moo');
class bar extends moo.foo {
  test2: number;
}

সুযোগকে কোডটি উজ্জ্বল করার বিভিন্ন উপায় নোট করুন। বাহ্যিক মডিউলগুলির সাথে, আপনাকে moduleউত্স ফাইলটির নাম ব্যবহার করতে হবে যাতে মডিউল সংজ্ঞা রয়েছে। আপনি যদি এএমডি মডিউলগুলি ব্যবহার করতে চান তবে আপনাকে নিম্নলিখিত হিসাবে সংকলকটি কল করতে হবে:

tsc --module amd app.ts

এটি তখন সংকলিত হয়

var __extends = this.__extends || function (d, b) {
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
}
define(["require", "exports", 'moo'], function(require, exports, __moo__) {
    var moo = __moo__;

    var bar = (function (_super) {
        __extends(bar, _super);
        function bar() {
            _super.apply(this, arguments);

        }
        return bar;
    })(moo.foo);
})    

7
আমি এখনই সম্পূর্ণরূপে হারিয়ে গেছে বোধ করি, আমি যাই করি না কেন, সংকলক প্রতিটি .ts ফাইলের জন্য পৃথক .js উত্পন্ন করে এবং এর মধ্যে একটিতে "প্রয়োজনীয়" কোডও নেই ... এছাড়াও "আমদানি moo = মডিউল (" moo ") ); "একটি ত্রুটি দেয় যে মও মডিউলটি (" মূ ") অংশটি হাইলাইট করে বর্তমান স্কোপে নামটির অস্তিত্ব নেই
— রজার জোহানসন

এখানে কয়েকটি বিষয় পরিষ্কার করতে হবে: আপনি কি ভিজ্যুয়াল স্টুডিওতে কাজ করছেন? আপনি সরাসরি টিএসএস ব্যবহার করে উত্তরে দেওয়া কোডটি সংকলনের চেষ্টা করেছিলেন? আপনি উভয় ফাইল একই ডিরেক্টরিতে স্থাপন করেছেন?
— ভ্যালেন্টিন

1
হ্যাঁ, কমান্ডলাইন থেকে একই ডিরেক্টরিতে দুটি ফাইলই সংকলন করা।
— রজার জোহানসন

2
আমি কাঁটাচামচ করে আপনাকে একটি টানার অনুরোধ পাঠিয়েছি। যদি এটি কাজ করে তবে আমাকে জানান।
— ভ্যালেন্টিন

12
নিখুঁত :) এটি পড়ার জন্য অন্যদের জন্য: মডিউলগুলি খুব বেশি রফতানি করা দরকার, "এক্সপোর্ট মডিউল এক্সএক্সএক্সএক্স"
— রজার জোহানসন

20

আপনি যদি এএমডি মডিউল ব্যবহার করেন তবে অন্যান্য উত্তরগুলি টাইপস্ক্রিপ্ট 1.0 এ কাজ করবে না (লেখার সময় সর্বাধিক নতুন))

আপনি প্রতিটি .tsফাইল থেকে কতগুলি জিনিস রফতানি করতে চান তার উপর নির্ভর করে আপনার কাছে বিভিন্ন পদ্ধতির উপলব্ধ ।

একাধিক রফতানি

Foo.ts

export class Foo {}
export interface IFoo {}

Bar.ts

import fooModule = require("Foo");

var foo1 = new fooModule.Foo();
var foo2: fooModule.IFoo = {};

একক রফতানি

Foo.ts

class Foo
{}

export = Foo;

Bar.ts

import Foo = require("Foo");

var foo = new Foo();

আমি উপরোক্ত পদ্ধতিটি পছন্দ করি এবং দেখতে পাচ্ছি যে tsc.exe () সংজ্ঞায়িত করার জন্য প্রাথমিক কলটিতে সঠিক নির্ভরতা তৈরি করছে, যা দুর্দান্ত! আমার জন্য সমস্যাটি 2 টি পৃথক ক্লাস, তাদের নিজস্ব ফাইলের প্রতিটি, একটি রফতানি মডিউলে আবৃত - আমি "আমদানি" করতে পারি, এবং অন্যটি ব্যবহার করতে পারি, তবে টাইপস্ক্রিপ্ট ব্যবহার করে এখনও বি থেকে উত্তরাধিকারী ক্লাস করতে পারি একরকম?
— স্যামুয়েল মিচাম

@ সামুয়েলমিয়াচাম, নিশ্চিত, আমি দেখছি না কেন। যদি আপনার এখনও সমস্যা হয় তবে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন এবং এটির সাথে এখানে লিঙ্ক করুন। আমি একবার দেখে নেব।
— ড্রয় নোকস

1
এটি আমার বাছাই করা হয়েছে, সবকিছু এখন খুব মসৃণ। নির্ভরতা, উত্তরাধিকার, এর সবগুলি: স্ট্যাকওভারফ্লো.com
— স্যামুয়েল মেচাম

@ সামুয়েলম্যাচাম আপনি কি এই পৃষ্ঠাটি বা আপনার সরবরাহিত লিঙ্কটি উল্লেখ করছেন, কারণ ড্রয়ের এই উত্তরটি স্পট বলে মনে হচ্ছে ...
— আলেকজান্ডার মিলস

এই উত্তরটি বেশ পুরানো (২০১৪)। টাইপস্ক্রিপ্ট হ্যান্ডবুকের মডিউল বিভাগে বর্তমান সিনট্যাক্সটি বর্ণিত হয়েছে ।
— ড্যান ড্যাসক্লেস্কু

18

আপনি যদি মডিউলগুলি ব্যবহার করতে চান এবং এটি একটি একক জাভাস্ক্রিপ্ট ফাইলটিতে সংকলন করতে চান আপনি নিম্নলিখিতটি করতে পারেন:

tsc -out _compiled/main.js Main.ts

Main.ts

///<reference path='AnotherNamespace/ClassOne.ts'/>
///<reference path='AnotherNamespace/ClassTwo.ts'/>

module MyNamespace
{
    import ClassOne = AnotherNamespace.ClassOne;
    import ClassTwo = AnotherNamespace.ClassTwo;

    export class Main
    {
        private _classOne:ClassOne;
        private _classTwo:ClassTwo;

        constructor()
        {
            this._classOne = new ClassOne();
            this._classTwo = new ClassTwo();
        }
    }
}

ClassOne.ts

///<reference path='CommonComponent.ts'/>

module AnotherNamespace
{
    export class ClassOne
    {
        private _component:CommonComponent;

        constructor()
        {
            this._component = new CommonComponent();
        }
    }
}

CommonComponent.ts

module AnotherNamespace
{
    export class CommonComponent
    {
        constructor()
        {
        }
    }
}

আপনি এখানে আরও পড়তে পারেন: http://www.codebelt.com/typescript/javascript-namespacing-with-typescript- অন্তর্- modules/


11

আমি এখন ব্যবহার করা এড়িয়ে চলব /// <reference path='moo.ts'/>তবে বাইরের লাইব্রেরিতে যেখানে সংজ্ঞা ফাইলটি প্যাকেজের অন্তর্ভুক্ত নয়।

reference pathসম্পাদকে সমাধান ত্রুটি, কিন্তু এটি সত্যিই ফাইল চাহিদা না মানে নেই আমদানি করতে। অতএব যদি আপনি একটি গুল্প ওয়ার্কফ্লো বা জেএসপিএম ব্যবহার করে থাকেন তবে সেগুলি একটি ফাইলের পরিবর্তে প্রতিটি ফাইল পৃথক করে সংকলনের চেষ্টা করতে পারে tsc -out।

টাইপস্ক্রিপ্ট থেকে 1.5

আপনি ফাইল স্তরে কী রফতানি করতে চান তার কেবল উপসর্গ (মূল স্কোপ)

aLib.ts

{
export class AClass(){} // exported i.e. will be available for import
export valueZero = 0; // will be available for import
}

আপনি রফতানি করতে চান ফাইলের শেষে আপনি যোগ করতে পারেন

{
class AClass(){} // not exported yet
valueZero = 0; // not exported yet
valueOne = 1; // not exported (and will not in this example)

export {AClass, valueZero} // pick the one you want to export
}

এমনকি দুটোকে একসাথে মেশানও

{
class AClass(){} // not exported yet
export valueZero = 0; // will be available for import
export {AClass} // add AClass to the export list
}

আমদানির জন্য আপনার কাছে দুটি বিকল্প রয়েছে, প্রথমে আপনি যা চান তা আবার বেছে নিন (একে একে)

anotherFile.ts

{
import {AClass} from "./aLib.ts"; // you import only AClass
var test = new AClass();
}

বা পুরো রফতানি

{
import * as lib from "./aLib.ts"; // you import all the exported values within a "lib" object
var test = new lib.AClass();
}

রফতানি সংক্রান্ত নোট: একই মূল্যের দ্বিগুণ রফতানি করলে ত্রুটি বাড়বে {রফতানি মান জিরো = 0; এক্সপোর্ট {valueZero}; // মানজিরো ইতিমধ্যে রফতানি করা হয়েছে ...}


আমি আমদানি করা ধরণের চারপাশে কোঁকড়ানো ধনুর্বন্ধনী অনুপস্থিত ছিল, সুতরাং এই লাইনটি এটি আমার জন্য স্থির করে:import {AClass} from "./aLib.ts";
— স্যামুয়েল স্লেড

8

যেহেতু টাইপস্ক্রিপ্ট 1.8+আপনি সাধারণ সরল importবিবৃতি যেমন ব্যবহার করতে পারেন :

import { ClassName } from '../relative/path/to/file';

বা ওয়াইল্ডকার্ড সংস্করণ:

import * as YourName from 'global-or-relative';

আরও পড়ুন: https://www.typescriptlang.org/docs/handbook/modules.html


গ্লোবাল পাথ সমর্থিত ??
— ভ্লাদিমির ভেনেগাস

: @VladimirVenegas আমি নই নিশ্চিত করুন যে আপনি কি ঠিক খুঁজছেন, কিন্তু দয়া করে এখানে কটাক্ষপাত github.com/Microsoft/TypeScript/wiki/...
— Szymon Dudziak

যারা এখন টাইপস্ক্রিপ্টে প্রবেশ করছেন, তাদের পক্ষে এটিই সেরা উত্তর। একটি সম্পূর্ণ উদাহরণের জন্য, দেখুন: github.com/bitjson/typescript-starter
— জেসন Dreyzehner

3

"///<reference path="web.ts" /> "app.ts", "টাইপস্ক্রিপ্ট বিল্ড" -> "জাভাস্ক্রিপ্ট আউটপুট ফাইলে একত্রিত করুন:" (চেক করা হয়েছে) -> "app.js" এর জন্য ভিএস ২০১৩ প্রকল্পের বৈশিষ্ট্যগুলির মতো এবং তারপরে একটি রেফারেন্স ব্যবহার করেছে



-1

ভিজ্যুয়াল স্টুডিওতে দ্রুত সহজ প্রক্রিয়া

সমাধান উইন্ডো থেকে সম্পাদকের কাছে .ts এক্সটেনশন সহ ফাইলটি টানুন এবং ফেলে দিন , এটি ইনলাইন রেফারেন্স কোড তৈরি করবে যেমন ..

/// <reference path="../../components/someclass.ts"/>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.