টাইপস্ক্রিপ্ট প্রকল্পগুলিতে কীভাবে বিদ্যমান সি # শ্রেণীর সংজ্ঞা পুনরায় ব্যবহার করবেন


121

আমি কেবলমাত্র TypeScriptআমার এইচটিএমএল ক্লায়েন্ট প্রকল্পে ব্যবহার শুরু করতে যাচ্ছি যা ইতিমধ্যে ইতিমধ্যে একটি সত্তা ফ্রেমওয়ার্ক ডোমেন মডেল সহ এমভিসি প্রকল্পের অন্তর্গত। আমি চাই যে আমার দুটি প্রকল্প (ক্লায়েন্ট সাইড এবং সার্ভার সাইড) সম্পূর্ণ আলাদা হয়ে যাবে কারণ দুটি দল এতে কাজ করবে ... JSON এবং REST ব্যবহার করা হয়েছে সামনে এবং পিছনে বস্তুর যোগাযোগের জন্য।

অবশ্যই, domainক্লায়েন্ট পক্ষের আমার অবজেক্টগুলির সাথে সার্ভারের পাশের বস্তুগুলির সাথে মিল থাকতে হবে। অতীতে, আমি সাধারণত ম্যানুয়ালি এটি করেছি। POJOটাইপস্ক্রিপ্টে সংশ্লিষ্ট ক্লাসগুলি তৈরি করার জন্য কি আমার সি # শ্রেণির সংজ্ঞাগুলি (বিশেষত আমার ডোমেন মডেলের ক্লাসগুলির) পুনরায় ব্যবহার করার কোনও উপায় আছে ?


না, এগুলি সম্পূর্ণ আলাদা ভাষা।
হ্যান্স প্যাস্যান্ট

6
হ্যাঁ আমি পোকো বলতে চাইছিলাম। আমি জানি যে তারা সম্পূর্ণ আলাদা ভাষা ... তবে একরকম আবারও এগুলি সমস্ত টাইপ করা এড়ানো ভাল হবে ... আমি মনে করি যে মুহুর্তের জন্য আমি আমার সি # কোডটি অনুলিপি করে আটকিয়ে দেব .. এবং এটি সংকলন না হওয়া পর্যন্ত এটি কোনও কিছুতেই রিফ্যাক্টর করব টাইপস্ক্রিপ্ট ... সেভাবে আমি নিশ্চিত যে আমি কোনও গুণকে ভুল টাইপ করিনি .. এবং আমাকে মনে রাখতে না সহায়তা করবে। তবে এটি স্পষ্টতই মোটেও ভাল লাগছে না।
পাবলোয়েলস্টন্ডো

1
আমি অন্য দিকটিতেও আগ্রহী - টাইপস্ক্রিপ্ট মডেল ক্লাস থেকে সি # মডেল ক্লাস পর্যন্ত, JSON এর মাধ্যমে দ্বিদ্বিদ্বিহীনভাবে deserializable able
জেসন ক্লেবান

আমিও এটির সন্ধান করছি এবং আমি এই গুলপ প্লাগইনটিতে কেবল হোঁচট খেয়েছি যদিও এর জন্য কতটা সমর্থন আছে তা আমি জানি না
লুক টি

উত্তর:


54

বর্তমানে এমন কিছু নেই যা টাইপস্ক্রিপ্টে সি # ম্যাপ করবে। আপনার যদি প্রচুর পোকো থাকে বা আপনি মনে করেন যে তারা প্রায়শই পরিবর্তিত হতে পারে তবে আপনি একটি রূপান্তরকারী তৈরি করতে পারেন - এর লাইনে সরল কিছু ...

public class MyPoco {
    public string Name { get; set; }
}

প্রতি

export class MyPoco {
    public Name: string;
}

এখানে একটা হল C # এর থেকে স্বয়ং-উৎপাদিত সম্পর্কে Codeplex আলোচনা

কেবল জিনিস আপডেট রাখতে, টাইপলাইট সি # থেকে টাইপস্ক্রিপ্ট ইন্টারফেস তৈরি করতে পারে:

http://type.litesolutions.net/


হ্যাঁ, এরকম কিছু হ'ল আমি ম্যানুয়ালি করতে ভাবছিলাম .. ভাল। এখনই কনভার্টার লেখার জন্য আমার কাছে সময় আছে তা নিশ্চিত নয় .. তবে হ্যাঁ, এটিই ধারণা হবে। ধন্যবাদ। মাইক্রোসফ্ট হ'ল ঠিক এখনই এটি করছে যা আমরা কথা বলি।
pabloelustondo

আপনি এটি দুটি উপায়ে যেকোনভাবে করতে পারেন ... এনভিডিটিই অটোমেশনের সাহায্যে বা মেফ ডিরেক্টরি ক্যাটালগ এবং প্রতিবিম্ব / অন্তঃকরণ ব্যবহার করে .ts ফাইলগুলি তৈরি করুন। আমি দ্বিতীয়টিকে পছন্দ করি কারণ এটি চাক্ষুষের উপর নির্ভর করে না।
আরেক বাল

1
আমি ডার্ট ব্যবহার শুরু করছিলাম এবং সি # এবং জাভাস্ক্রিপ্টের মধ্যে কীভাবে প্রকারগুলি ভাগ করা যায় তার একই ইস্যুতে ছুটে এসেছি। আমি আশা করি এই সমস্যাটি টাইপসক্রিপ্টের মাধ্যমে সমাধান করা হবে তবে দেখে মনে হচ্ছে উত্তরটি এখনও নেই। আমি সল্টনারেল-সংকলক দ্বারা কিছুটা নষ্ট হয়ে গিয়েছিলাম যা জাভাস্ক্রিপ্টে সি # সংকলন করে বরং সুন্দরভাবে saltarelle-compiler.com
ব্রেভনিউথ ম্যাথ

2
@ ড্যানিয়েল হার্ভী এনামগুলি টাইপলাইট দ্বারা সঠিকভাবে উত্পন্ন হয়েছে, সম্ভবত আপনার মন্তব্যের পরে ঠিক হয়ে গেছে।
পাওলোয়

1
TypeScriptPaste সি # টি টাইপস্ক্রিপ্টে রূপান্তর করবে। আপনার কাছে রোজলিন সংকলক থাকতে হবে যার অর্থ ভিজ্যুয়াল স্টুডিও 2015, তবে এটি সত্যিই ভালভাবে কাজ করে। এটি 100% নয় এবং আমাকে কিছু কোড বোলাতে হয়েছিল - ফোরচকে লুপের জন্য রূপান্তর করে আমার নিজস্ব তালিকা <T> শ্রেণি লিখুন, এবং আপনাকে কোডটি গঠন করতে হবে যাতে কেবল তার অভ্যন্তরীণ ডেটা স্ট্রাকচার সহ তার 'খাঁটি' হয় সাথে কাজ করুন, তবে ভিএস-তে কোড সংশোধন করতে এবং পরীক্ষার কোডটি টাইপস্ক্রিপ্টের মাধ্যমে জাভাস্ক্রিপ্টে 'সংকলন' করতে সক্ষম হওয়ায় এটির জন্য একটি ছোট দাম ছিল।
জন মোট 19

36

ওয়েব এসেনশিয়ালগুলি সেভের সময়ে টাইপস্ক্রিপ্ট .d.tsফাইলগুলিতে সি # ফাইল সংকলন করার অনুমতি দেয় । তারপরে আপনি আপনার .tsফাইলগুলি থেকে সংজ্ঞাটি উল্লেখ করতে পারেন ।

এখানে চিত্র বর্ণনা লিখুন


আপনি কি .ts ফাইল এবং সি # গুলিয়ে ফেলছেন? এই বিকল্পটি খুঁজে
ফ্লোরস

1
তবে কিছু অনুসন্ধানের পরে আমি আপনার অর্থটি খুঁজে পেয়েছি .. আসলে বেশ কার্যকর।
ফ্লোর

2
আসলে এটি নয়, আমি নিশ্চিত যে অপারেশনটি 'সংকলন' কিছুই করে না, এটি কোড উত্পন্ন করে। এটি আমাকে বিভ্রান্ত করেছে, কিন্তু 99% সঠিক নয়, আমি আপনাকে তা দিচ্ছি ;-)
ফ্লোরস

1
এটির আরও কার্যকর ছিল যদি আমরা এর নেমস্পেস এবং কিছু কাস্টমাইজেশন কনফিগার করতে পারি।
ফারশিদ সাবেরি

5
এটি ব্যবহার করতে আপনাকে এখন ম্যানুয়ালি 'টাইপস্ক্রিপ্ট সংজ্ঞা জেনারেটর ইনস্টল করতে হবে - এখানে দেখুন
তারান

24

টাইপলাইট এবং টি 4 টিএস উভয়ের উপরেই দেখতে ভাল লাগল, কেবল একটি বেছে নিয়েছে, টাইপলাইট, এর জন্য সমর্থন পেতে কাঁটাচামচ করেছে

  • মান টাইপস ,
  • Nullables
  • উট কেসিং ( টাইপস্ক্রিপ্টের মূল ডকটি উট ব্যবহার করে এবং এটি সি # এর সাথে খুব সুন্দর হয়)
  • সর্বজনীন ক্ষেত্র (পরিষ্কার এবং পঠনযোগ্য পোকো পছন্দ করে, এটি সি # সংকলকটির জন্যও সহজ করে তোলে)
  • মডিউল জেনারেশন অক্ষম করুন

তারপরে আমার সি # ইন্টারফেসের প্রয়োজন ছিল এবং আমার নিজের জিনিসটি বেক করার সময় হয়েছে এবং একটি সহজ টি 4 স্ক্রিপ্ট লিখেছিলাম যা আমার প্রয়োজন অনুযায়ী করে। এটি এনামগুলিকেও অন্তর্ভুক্ত করে । কোনও রেপোর দরকার নেই, কেবলমাত্র টি -4 এর 100 টি লাইন।

ব্যবহার
কোনও লাইব্রেরি, কোনও নিউগেট নয়, কেবল এই সাধারণ সরল টি 4 ফাইল - ভিজ্যুয়াল স্টুডিওতে "অ্যাড আইটেম" ব্যবহার করুন এবং যে কোনও টি 4 টেম্পলেট চয়ন করুন। তারপরে এটি ফাইলটিতে আটকান। প্রতিটি লাইন এতে "ACME" দিয়ে মানিয়ে নিন। প্রতিটি সি # শ্রেণির জন্য একটি লাইন যুক্ত করুন

<#= Interface<Acme.Duck>() #>

অর্ডার সম্পর্কিত বিষয়গুলি, যে কোনও পরিচিত ধরণটি ফোলউইং ইন্টারফেসে ব্যবহৃত হবে। যদি আপনি কেবল ইন্টারফেস ব্যবহার করেন তবে ফাইলটি এক্সটেনশন .d.ts হতে পারে, এনামগুলির জন্য আপনার একটি .ts ফাইলের প্রয়োজন , যেহেতু একটি চলক তাত্ক্ষণিক হয়।

কাস্টমাইজেশন
স্ক্রিপ্ট হ্যাক।

<#@ template debug="true" hostSpecific="true" language="C#" #>
<#@ output extension=".ts" #>
<#@ Assembly Name="System.Core.dll" #>
<#@ assembly name="$(TargetDir)ACME.Core.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Linq" #>

<#= Interface<Acme.Bunny>() #>
<#= Interface<Acme.Duck>() #>
<#= Interface<Acme.Birdy>() #>
<#= Enums<Acme.CarrotGrade>() #>
<#= Interface<Acme.LinkParticle>() #>

<#+  
    List<Type> knownTypes = new List<Type>();

    string Interface<T>()
    {   
        Type t = typeof(T);     
        var sb = new StringBuilder();
        sb.AppendFormat("interface {0} {{\n", t.Name);
        foreach (var mi in GetInterfaceMembers(t))
        {
            sb.AppendFormat("  {0}: {1};\n", this.ToCamelCase(mi.Name), GetTypeName(mi));
        }
        sb.AppendLine("}");
        knownTypes.Add(t);
        return sb.ToString();
    }

    IEnumerable<MemberInfo> GetInterfaceMembers(Type type)
    {
        return type.GetMembers(BindingFlags.Public | BindingFlags.Instance)
            .Where(mi => mi.MemberType == MemberTypes.Field || mi.MemberType == MemberTypes.Property);
    }

    string ToCamelCase(string s)
    {
        if (string.IsNullOrEmpty(s)) return s;
        if (s.Length < 2) return s.ToLowerInvariant();
        return char.ToLowerInvariant(s[0]) + s.Substring(1);
    }

    string GetTypeName(MemberInfo mi)
    {
        Type t = (mi is PropertyInfo) ? ((PropertyInfo)mi).PropertyType : ((FieldInfo)mi).FieldType;
        return this.GetTypeName(t);
    }

    string GetTypeName(Type t)
    {
        if(t.IsPrimitive)
        {
            if (t == typeof(bool)) return "bool";
            if (t == typeof(char)) return "string";
            return "number";
        }
        if (t == typeof(decimal)) return "number";            
        if (t == typeof(string)) return "string";
        if (t.IsArray)
        {            
            var at = t.GetElementType();
            return this.GetTypeName(at) + "[]";
        }
        if(typeof (System.Collections.IEnumerable).IsAssignableFrom(t)) 
        {
            var collectionType = t.GetGenericArguments()[0]; // all my enumerables are typed, so there is a generic argument
            return GetTypeName(collectionType) + "[]";
        }            
        if (Nullable.GetUnderlyingType(t) != null)
        {
            return this.GetTypeName(Nullable.GetUnderlyingType(t));
        }
        if(t.IsEnum) return "number";
        if(knownTypes.Contains(t)) return t.Name;
        return "any";
    }

    string Enums<T>() // Enums<>, since Enum<> is not allowed.
    {
        Type t = typeof(T);        
        var sb = new StringBuilder();        
        int[] values = (int[])Enum.GetValues(t);
        sb.AppendLine("var " + t.Name + " = {");
        foreach(var val in values) 
        {
            var name = Enum.GetName(typeof(T), val);
            sb.AppendFormat("{0}: {1},\n", name, val);
        }
        sb.AppendLine("}");
        return sb.ToString();
    }
#>

স্ক্রিপ্টের পরবর্তী স্তরটি হবে এমভিসি জসনকন্ট্রোলার শ্রেণি থেকে পরিষেবা ইন্টারফেস তৈরি করা।


1
খুব চতুর, কিন্তু আপনি আছে typeof(ParticleKind)আপনার Enum<T>। অবশ্যই তা হওয়া উচিত typeof(T)? আপনার পরবর্তী টাইপস্ক্রিপ্ট সংস্করণগুলির জন্যও আপডেট boolকরতে হবেboolean
কোডিং হয়ে গেছে

এছাড়াও দ্রষ্টব্য: ক্লাসে এনাম বৈশিষ্ট্যগুলির সাথে এই বিরতি
কোডিং হয়ে গেছে

1. আহ, হ্যাঁ, মাথা আপ জন্য আপনাকে ধন্যবাদ, এটি ঠিক করবে। ২. এই স্ক্রিপ্টটি লেখার পর থেকেই টাইপস্ক্রিপ্টের বিকাশ ঘটে। দেখে মনে হচ্ছে এটির জন্য কিছু আপডেট দরকার হতে পারে, আপনি অবশ্যই ঠিক। আমি আশা করি এটি আপনার নিজস্ব উদ্দেশ্যে প্রারম্ভিক পয়েন্ট হিসাবে কাজ করবে।
সিটিকিড

1
আমি এটিকে সহায়ক লাইব্রেরিতে রূপান্তর করেছি, বাগগুলি স্থির করেছি এবং এখন ইন্টারফেস এবং নতুন const enumগুলি উত্পন্ন করতে আমার টিটি ফাইলগুলিতে কেবল একক-লাইন এন্ট্রি ব্যবহার করি । উদাহরণের জন্য ধন্যবাদ। এটি খুব কাছাকাছি ছিল এবং আমার একটি দ্রুত ফলাফল খুব দ্রুত পেয়েছে।
কোডিং হয়ে গেছে

23

আপনি যদি vscode ব্যবহার করেন তবে আপনি আমার এক্সটেনশন csharp2ts ব্যবহার করতে পারেন যা ঠিক এটি করে।

আপনি কেবল আটকানো সি # কোডটি নির্বাচন করুন এবং Convert C# to TypeScriptকমান্ড প্যালেট থেকে এখানে চিত্র বর্ণনা লিখুন একটি রূপান্তর উদাহরণ থেকে কমান্ডটি চালান :

public class Person
{
    /// <summary>
    /// Primary key
    /// </summary>
    public int Id { get; set; }

    /// <summary>
    /// Person name
    /// </summary>
    public string Name { get; set; }
}

প্রতি

export interface Person
{
    /**Primary key */
    Id : number;

    /**Person name */
    Name : string;
}

1
আমি মনে করি লোকেরা সম্পূর্ণ স্বয়ংক্রিয় সমাধানে আগ্রহী যেখানে এমসবিল্ডগুলি সংকলনগুলি গ্রাস করার আগে টাইপস্ক্রিপ্ট সংজ্ঞাগুলি আউটপুট করে। প্লাগিন ব্যবহার করে এটি পাওয়ার কোনও উপায় আছে কি?
বিনকি

না, এটি একটি ভিএসকোড প্লাগইন, কেবল সম্পাদকের ভিতরেই কাজ করে এবং একা একা থাকা প্রোগ্রাম হিসাবে নয়
রাফায়েল

আপনি যদি নোড.জেএস বা টাইপসক্রিপ্টের মাধ্যমে চান তবে আমি এই ভিএসকোড এক্সটেনশনটিকে নোড মডিউলে রূপান্তর করেছি। আপনি এখানে রেপোটি
সাগর রানা মাগার

কমান্ডকে কিবোর্ড শর্টকাটে লিঙ্ক করার কোনও উপায় আছে? উদাহরণস্বরূপ, নেট কোড নির্বাচন করবে এবং "কনভার্ট সি # টাইপস্ক্রিপ্টে" চালনার জন্য সেটআপ শিফট + সিআরটিএল + সি থাকবে, যা প্রক্রিয়াটি গতিবেগ করবে। আমি প্লাগইন পছন্দ করি!
পাভেল সিওচ

18

এটি সমাধানের জন্য আমার পদ্ধতি এখানে। আপনার সি # ক্লাসটি একটি অ্যাট্রিবিউট দিয়ে ঘোষণা করুন এবং .d.ts- ফাইলগুলি উত্পন্ন হবে (টি 4 ট্রান্সফর্ম ব্যবহার করে)। একটা ব্যাপার nuget উপর প্যাকেজ এবং উৎস GitHub উপলব্ধ । আমি এখনও প্রকল্পে কাজ করছি, কিন্তু সমর্থন বেশ বিস্তৃত।


আমি এই প্রকল্পটি কাঁটাচামচ করেছি এবং নকআউট সমর্থন এখানে যুক্ত করেছি: github.com/omniscient/t4ts
ফ্রাঙ্ক.জার্মিন

18

আপনি যদি ভিজুয়াল স্টুডিও ব্যবহার করছেন তবে টাইপরাইটার এক্সটেনশন যুক্ত করুন।

ভিজ্যুয়াল স্টুডিও গ্যালারী

ওয়েবসাইট / ডকুমেন্টেশন

হালনাগাদ

সঙ্গে ওয়েব এসেনশিয়ালস বনাম 2015 ইনস্টল, আপনি ক্লাস ফাইল রাইট ক্লিক করতে পারেন, তারপর> ওয়েব এসেনশিয়ালস> প্রসঙ্গ মেনু থেকে টাইপ করা বিষয় Intellisense ফাইল তৈরি করুন।


এটি ইন্টেলিজেন্স সাপোর্টের জন্য d.ts ফাইল তৈরি করেছে তবে এটি কীভাবে ব্যবহার করবে এবং তারপরে অন্তর্নিহিত শ্রেণি তৈরির সাথে কী সম্পর্ক? আমি ওয়েবসেন্টেলগুলিতে গিয়েছি এবং কোনও ডক্স খুঁজে পাচ্ছি না। কোনও পরামর্শ? টিয়া।
হাওয়ার্ড্লো

@ হাই আপনি এটি ব্যবহার করতে হবে .ts ফাইলের মধ্যে কেবলমাত্র ড.টি.এস. ফাইলটি উল্লেখ করুন When আপনি / আপনার ক্লাস পরিবর্তন করলে অন্তর্নিহিত ডি.এস.টি ফাইল আপডেট হবে T একটি .ts ফাইলের শীর্ষে ফাইল করুন এবং এটি আপনার জন্য রেফারেন্স তৈরি করবে))
মাইকেল ট্রানকিডা

ধন্যবাদ মাইকেল! আমি d.ts ফাইলটি একটি খালি .ts ফাইলের মধ্যে ফেলে দেওয়ার চেষ্টা করেছি এবং এটি কেবল ফাইলটি যুক্ত ফোল্ডারে যুক্ত করেছে। এটি ভিএস ২০১৫ এবং নতুন ভিএস ২০১7 এ চেষ্টা করেছে, একই ফলাফল। আপনি কি এমন কোনও ভিডিও বা টিউটোরিয়াল সম্পর্কে জানেন যা দেখায় যে এটি কীভাবে কাজ করে? টিআইএ
হাওয়ার্ড্লো

আমি d.ts ফাইলটি সম্পাদকের একটি .ts ফাইলে ফেলে দেওয়ার চেষ্টা করেছি এবং এটি রেফারেন্স তৈরি করেছে। আমার মনে হয় আমি এখন বুঝতে পেরেছি। টিউটোরিয়াল এখনও স্বাগত। ধন্যবাদ!
হাওয়ার্ড্লো

@ হ্যালো দুঃখিত, কোনও টিউটোরিয়াল সম্পর্কে জানেন না। আমি যখন ওয়েব এসেনশিয়াল রুটে যাই, তখন আমি নকল .ts ফাইল তৈরি করছিলাম কারণ আমার ডোমেন মডেলগুলি একটি শ্রেণিকালার লাইব্রেরিতে রয়েছে এবং আমার ক্লায়েন্টের সাইড কোডে আমার সাধারণত ডিটিও বা ভিএম মডেল তৈরি করতে হবে যা ব্রাউজারের প্রয়োজন সম্পর্কে জানা. আপনার যদি এই সব নিয়ে সমস্যা হয় তবে টাইপরাইটার এক্সটেনশানটি চেষ্টা করুন। এটি আপনাকে যে কোনও জায়গায় ur .ts মডেল ফাইল রাখতে দেয়।
মাইকেল ট্রানকিডা

15

রিইনফোর্সড. টাইপিংস ফ্রেমওয়ার্কটি ব্যবহার করে দেখুন। দেখে মনে হচ্ছে এটি আপনার সমস্যার সমাধান করে।

  1. এটি নিউগেট থেকে ইনস্টল করুন
  2. আপনার পোকোতে নেভিগেট করুন এবং এর [TsInterface]উপরে বৈশিষ্ট্য যুক্ত করুন

    using Reinforced.Typings.Attributes;
    namespace YourNamespace {
        [TsInterface]
        public class YourPoco
        {
            public int YourNumber { get;set; }
            public string YourString { get;set; }
            public List<string> YourArray { get;set; }
            public Dictionary<int, object> YourDictionary { get;set; }
        }
    }
  3. আপনার প্রকল্পটি পুনর্নির্মাণ করুন
  4. %Your_Project_Directory%/Scripts/project.tsফাইলটিতে উত্পন্ন টাইপস্ক্রিপ্ট কোডটি সন্ধান করুন এবং এটি ম্যানুয়ালি প্রজেক্টে যুক্ত করুন

    module YourNamespace {
        export interface IYourPoco
        {
            YourNumber: number;
            YourString: string;
            YourArray: string[];
            YourDictionary: { [key: int]: any };
        }
    }
  5. আপনার সমস্ত টাইপস্ক্রিপ্ট কোডে আপনার সমস্ত পোকো এবং রেফারেন্সের জন্য একই করুন project.ts

ডকুমেন্টেশন উইকিতে আরও বিশদ দেখুন


কেবলমাত্র ইউআরএল ভাগ করে নেওয়ার পরিবর্তে নমুনা স্নিপেট যুক্ত করুন
ভেঙ্কট.আর


তবে ঠিক আছে, আমি এখানে একটি উদাহরণ সরবরাহ করব :)
পাভেল বি নভিকভ

না। নেট কোর সমর্থন ( লিঙ্ক ) :(
অ্যালেক্স ক্লাউস

5
@ অ্যালেক্সক্লাউস। নেট কোর সমর্থন এসেছে
পাভেল বি নোভিকভ

10

আমি একটি ছোট্ট ইউটিলিটি তৈরি করেছি যা সি # ক্লাস থেকে টাইপস্ক্রিপ্ট ইন্টারফেস তৈরি করতে পারে। নিউগেট প্যাকেজ হিসাবে উপলব্ধ । প্রকল্পের ওয়েবপৃষ্ঠায় বিশদ ডকুমেন্টেশন পাওয়া যাবে


ভাল লাইব্রেরি, ভাল প্রচেষ্টা। দুর্ভাগ্যক্রমে উত্পাদিত মান ধরণের সামঞ্জস্য করার কোনও উপায় খুঁজে পাওয়া যায় নি, যেমন "স্ট্রিং" কে "নকআউটঅবার্ভেস্টাবল স্ট্রিং" বা "স্ট্রিং []" কে "নকআউটঅবসার্ভেআররে" তে রূপান্তর করুন। এটি কি এমন কিছু যা ভবিষ্যতের পরিকল্পনার মধ্যে রয়েছে?
রুট

2
আমি এর পরিবর্তে টি 4 টিএস ব্যবহার করেছি, এটি 14 মিনিট সময় নিয়েছে।
রুট

@ রুট, আপনার উত্পন্ন সংজ্ঞাগুলিতে আপনার আসলে একটি স্ট্রিং [] নকআউটঅবার্সেবল আরেতে রূপান্তর করা উচিত নয়। আপনি প্রকৃতপক্ষে এই শ্রেণীর ক্রমিক উদাহরণগুলি গ্রাস করার সময় আপনি এই উত্পন্ন সংজ্ঞাটি ব্যবহার করেন। এখন, আপনি ম্যাপিং প্লাগইনটির মাধ্যমে পুরো অবজেক্টটি চালাচ্ছেন, তবে আমি এর বিরুদ্ধে সাবধানতা অবলম্বন করব। এটি অতিরিক্ত হতে পারে এবং আমি সর্বদা পর্যবেক্ষণে পূর্ণ সি # ক্লাসের সিরিয়ালযুক্ত উদাহরণ থেকে ম্যানুয়ালি (সম্ভবত কোনও কর্টারের মাধ্যমে) রূপান্তর করতে পছন্দ করি । আমি ম্যাপিং প্লাগইনটির মাধ্যমে অন্ধভাবে এটিকে চালানোর পরামর্শ দিই কেবল CRUD স্টাইল অ্যাপ্লিকেশন।
অ্যালেন রাইস

@Lukas Kabrt, TypeLite জন্য আপনাকে অনেক ধন্যবাদ এটা আমাদের প্রকল্পে অত্যন্ত উপকারী হয়েছে এবং আমি সংক্ষেপে এখানে এটি সম্পর্কে লিখেছিলেন: underwatergorilladome.com/...
অ্যালেন রাইস

অ্যালেনআরাইস, আমি হাত-কারুকৃত নকআউট ভিউ-মডেল ক্লাসগুলি হাতে পাওয়া সহজ বলে মনে করেছি, যেখানে আমি আপনার বর্ণিত পদ্ধতির ব্যবহার করি এবং এটি একটি স্বয়ংক্রিয় উত্পন্ন শ্রেণীর সাথে সংযুক্ত করি যা একটি ডিটিও যা ম্যাপিং প্লাগইন পেরিয়ে যায়।
রুট

7

এই লাইব্রেরি টাইপরাইটার একবার দেখুন

এটি কেবল ক্লাস, এনাম, ইন্টারফেস ইত্যাদি নয়, এপিআই-কন্ট্রোলারগুলিকে রূপান্তর করে যা কেবল দুর্দান্ত ..

এছাড়াও আপনি উত্স .cs ফাইল সংরক্ষণ করার সাথে সাথে এটি এটি করে, তাই আমাকে কোনও বাহ্যিক সরঞ্জাম ট্রিগার করতে হবে না। .Cs সংরক্ষণ করুন এবং আপনি আপডেট পাবেন .ts


দুর্দান্ত জিনিসটি এটি সম্পর্কিত সিএস ফাইলগুলি সংরক্ষণে টিএস ফাইল তৈরি করে। তবে আউটপুট ফোল্ডারটি সেট করা বেশ ভঙ্গুর ( এখানে আলোচনা দেখুন ) এবং কিছু হস্ত-কারুকৃত কোডের প্রয়োজন।
অ্যালেক্স ক্লাউস

আমি তার জন্য বিল্ড সরঞ্জামগুলি ব্যবহার করি, এবং এই সরঞ্জামটি এখানে উল্লেখ করা থেকে আরও শক্তিশালী
হরিশার

6

আমার কাছে একটি সামান্য সমাধান রয়েছে যা টি 4 টেম্পলেট ব্যবহার করে ( উত্স দেখুন )।

আপনি যে কোনও সিএলআর পোকো থেকে যান:

public class Parent : Person
{
    public string Name { get; set; }
    public bool? IsGoodParent { get; set; }
    public virtual ICollection<Child> Children { get; set; }
}

একটি টাইপস্ক্রিপ্ট ইন্টারফেস:

///<reference path="Child.d.ts" />
///<reference path="Person.d.ts" />
interface Parent extends Person {
    Name : string;
    IsGoodParent? : bool;
    Children : Child[];
}

3

আপনি ওপেন-সোর্স প্রকল্প এনএসওয়্যাগ ব্যবহার করতে পারেন : জিইউআইতে , আপনি একটি বিদ্যমান .NET DLL থেকে .NET ক্লাস নির্বাচন করতে পারেন এবং এর জন্য টাইপস্ক্রিপ্ট ইন্টারফেস তৈরি করতে পারেন।

প্রকল্পটি কমান্ড লাইন সরঞ্জাম এবং টি 4 টেমপ্লেটগুলির পাশাপাশি ওয়েব API কন্ট্রোলারগুলির জন্য ক্লায়েন্ট কোড তৈরির সহায়তা সরবরাহ করে ...


সচেতন থাকুন, এনএসওয়াগ কেবলমাত্র বাইনারি ফাইলগুলি (আপনার পাশাপাশি আপনার বাইনারিগুলির সমস্ত নির্ভরতা প্রয়োজন) বা এর জেএসওএন ফাইল থেকে টিএস ফাইল তৈরি করবে যা সোয়াগার বাইনারি ফাইলগুলি থেকে উত্পন্ন করে।
অ্যালেক্স ক্লাউস

3

আপনার যদি প্রতিটি উত্পন্ন টাইপস্ক্রিপ্ট শ্রেণি / ইন্টারফেসের জন্য আলাদা ফাইল তৈরি করার প্রয়োজন হয় (উদাহরণস্বরূপ "প্রতি ফাইলের মধ্যে একক শ্রেণিতে"), আপনি টাইপজেন চেষ্টা করতে পারেন । এটি এমন একটি সরঞ্জাম যা আপনি প্যাকেজ ম্যানেজার কনসোল থেকে আপনার সি # শ্রেণি / এনামগুলির উপর ভিত্তি করে টাইপস্ক্রিপ্ট ফাইলগুলি তৈরি করতে ব্যবহার করতে পারেন। এটি বর্তমানে সমর্থন করে:

  • রফতানি এনাম; টিএস ক্লাস বা ইন্টারফেস হিসাবে পোকো রফতানি করা হচ্ছে
  • উত্তরাধিকার
  • জেনেরিক প্রকার
  • সংগ্রহ / নেস্টেড সংগ্রহের ধরণ

প্লাস কিছু অতিরিক্ত বৈশিষ্ট্য। এটি ওপেন সোর্স (এটি আপনি গিথুব থেকে দেখতে পারেন )।


2

অন্যদিকে কীভাবে?

পরীক্ষা করে দেখুন erecruit টাইপ করা বিষয় অনুবাদক । এটি সি # সমর্থনে যাওয়ার জন্য প্রস্তুত সাথে আসে, তবে এটি আসলে টেম্পলেট ভিত্তিক (রেন্ডারিংয়ের জন্য নুনজাক্স ব্যবহার করে) যার অর্থ এটি অন্য যে কোনও কিছু তৈরি করতে পারে - ভিবি.এনইটি, এফ #, সি ++, এক্সএমএল, এসকিউএল - আপনি কোনও টেম্পলেট দিয়ে এনকোড করতে পারেন যাই হোক না কেন।

.NET কনসোল প্রোগ্রাম হিসাবে কাজ করে, নোডজেএস প্রোগ্রাম (উইন্ডোজে নেই তাদের জন্য), বা ভিজ্যুয়াল স্টুডিও এক্সটেনশন হিসাবে , জেনারেট-অন-সেভ কার্যকারিতা সহ সম্পূর্ণ। এবং এমএসবিল্ড সমর্থনটি কেবল আপনার বিল্ড সার্ভারকে সুখী করার জন্য অন্তর্ভুক্ত। :-)


আমি এটি +1 করেছি কারণ এটি সত্যই সেরা সমাধান, খুনি বৈশিষ্ট্য হ'ল উত্পন্ন-সঞ্চয়।
জন জাবরোস্কি

2

আপনি এটি ব্যবহার করতে পারেন: https://github.com/pankleks/TypeScriptBuilder

এই ছোট পাঠাগারটি সি # প্রকারের ভিত্তিতে টাইপস্ক্রিপ্ট ধরণের সংজ্ঞা উত্পন্ন করে। আপনার ফ্রন্টএন্ড টাইপস্ক্রিপ্ট প্রকল্পের কোড তৈরি করতে এটি সরাসরি আপনার ব্যাকএন্ড সি # প্রকল্পে ব্যবহার করুন। প্রাক বিল্ড সরঞ্জামগুলির মাধ্যমে কোড উত্পন্ন করতে আপনি ছোট কনসোল অ্যাপ্লিকেশনও তৈরি করতে পারেন।

পূর্ণ ও নেট কোর ফ্রেমওয়ার্কে কাজ করে!

নুগেট দ্বারা ইনস্টল করুন: Install-Package TypeScriptBuilder

সমর্থিত বৈশিষ্ট্য

  • সমাধান নির্ভরতা নির্ভরতা
  • জেনেরিক্স
  • উত্তরাধিকার টাইপ করুন
  • নেমস্পেস (মডিউল)
  • Enums
  • অবিচ্ছিন্ন প্রকার
  • অভিধান রূপান্তর (শক্তিশালী টাইস টিএস সূচকযুক্ত বস্তুগুলিতে)
  • কোড জেনারেশন নিয়ন্ত্রণ বৈশিষ্ট্যগুলির সেট করুন
  • any রূপান্তরিত করা যায় না এমন ধরণের জন্য

আরও বিবরণ: https://github.com/pankleks/TypeScriptBuilder/blob/master/README.md


শুধু চেষ্টা করেছেন TypeScriptBuilderএবং এটি এখনও পর্যন্ত দুর্দান্ত দেখাচ্ছে; নেট কোর সমর্থনের জন্য হুর!
টোবিয়াস জে

1

ছেলেদের https://github.com/reinforced/ রিইনফোর্ডেড . টাইপিংস এ একবার নজর দেওয়া হয়েছে । আমি গত কয়েক দিন ধরে টাইপলাইট এবং টি 4 টেমপ্লেটগুলি নিয়ে খেলছি এবং এই প্রকল্পটি শেষ করব। এটি অতি-সরল এবং কবজির মতো কাজ করে। কেবল প্যাকেজটি পান, কনফিগারেশন ফাইলটি পরিবর্তন করুন (এটি 10 ​​সেকেন্ডের মতো হয়) এবং তৈরি করুন। সমস্ত কোনও সমস্যা ছাড়াই স্বয়ংক্রিয়ভাবে সম্পন্ন হয়। লেখককে আশীর্বাদ করুন!

টি 4 টেমপ্লেটগুলি সম্পর্কে খারাপ জিনিসটি হ'ল একবার আপনি ভিএস থেকে তৈরি করলে স্ক্যান করা অ্যাসেমব্লিগুলি লক হয়ে যায় এবং আপনাকে অবশ্যই ভিএস পুনরায় চালু করতে হবে (এটি কত নির্বোধ?)। টি 4 টুলবক্সে কিছু কার্যকর আছে + কিছু ভিএস সাফ করার নির্দেশিকা কিন্তু এগুলির কোনওটিই আমার পক্ষে কার্যকর হয়নি।


1

আমি সিটিকিড সমাধানটি পছন্দ করি। আমি এটি কিছুটা প্রসারিত করেছি। সুতরাং, সমাধানটি টি 4 টেম্পলেটগুলির সাথে কোডজেনারেশন কৌশলের উপর ভিত্তি করে।

এটি সাধারণ টাইপসক্রিপ্ট প্রকার এবং পরিবেষ্টনীয় ঘোষণা জেনারেট করতে পারে।

এটি উত্তরাধিকার এবং ইন্টারফেস বাস্তবায়ন সমর্থন করে।

জেনারিকস, অ্যারে এবং টাইপ ক্ষেত্র হিসাবে তালিকাগুলি সমর্থন করে।

এছাড়াও এটি টাইপস্ক্রিপ্ট প্রকারগুলিতে অনুবাদ করে যা কনফিগারেশনে স্পষ্টভাবে উল্লেখ করা হয়নি (উদাহরণস্বরূপ আমরা টাইপ এ আমদানি করি এবং টিএস আউটপুটে আপনি আরও কিছু প্রকারগুলি খুঁজে পেতে পারেন: ক্ষেত্রের ধরণ, বেস প্রকার এবং ইন্টারফেস)।

আপনি টাইপের নামও ওভাররাইড করতে পারেন।

এনামগুলিও সমর্থিত।

ব্যবহারের উদাহরণ (আপনি এটি প্রকল্পের সংগ্রহস্থলে খুঁজে পেতে পারেন):

// set extension of the generated TS file
<#@ output extension=".d.ts" #>

// choose the type of TS import TsMode.Ambient || TsMode.Class
<# var tsBuilder = new TsBuilder(TsMode.Ambient); #>

// reference assembly with the c# types to be transformed
<#@ assembly name="$(SolutionDir)artifacts\...\CsT4Ts.Tests.dll" #>

// reference namespaces
<#@ import namespace="CsT4Ts.Tests" #>
<#
    //add types to processing
    tsBuilder.ConsiderType(typeof(PresetDTOBase), "PresetBase");
    tsBuilder.ConsiderType(typeof(PresetDTO), "Preset");
    tsBuilder.ConsiderType(typeof(TestInterface<,>));
#>

// include file with transformation algorithms
<#@ include file="CsT4Ts.t4" #>

এবং আপনি একটি আউটপুট পাবেন

//CsT4Ts.Tests.PresetDTOBase => PresetBase
// CsT4Ts.Tests.PresetDTO => Preset
// CsT4Ts.Tests.TestInterface`2 => TestInterface
// CsT4Ts.Tests.TestEnum => TestEnum

declare class PresetBase
{
    PresetId: string;
    Title: string;
    InterviewDate: string;
}

declare class Preset extends PresetBase
{
    QuestionsIds: string[];
}

declare interface TestInterface<TA, TB>
{
    A: string;
    B: number;
    C: TestEnum;
    D: TestEnum[];
    E: number[];
    F: TA;
    G: TB[];
}

declare enum TestEnum
{
    Foo = 10,
    Boo = 100
}

এখানে সম্পূর্ণ সমাধান পরীক্ষা করুন: https://bitbucket.org/ Chandrush / cst4ts


1

আপনি Bridge.net ব্যবহার করতে পারেন। সংস্করণ 1.7 থেকে এটি সি # প্রকারের জন্য টাইপস্ক্রিপ্ট সংজ্ঞা জেনারেশনকে সমর্থন করে। Http://bridge.net/docs/generate-typescript-definitions/ দেখুন


মূল সমস্যাটি হ'ল আপনি যখন গুগল অনুসন্ধান করবেন তখন আপনি মূল প্রশ্নে
অবতীর্ণ হতে পারেন

সুতরাং নিশ্চিত করুন যে ক্যানোনিকালটিতে সর্বোত্তম তথ্য রয়েছে। একাধিক প্রশ্ন পোস্ট করবেন না। এ সম্পর্কে আরও কোনও আলোচনা মেটা স্ট্যাক ওভারফ্লোতে
মার্টিজান পিটারস

1

আমি @ সিটিকিডের উত্তরও অনেক পছন্দ করেছি, তাই আমি এটি একবারে পুরো নামস্থানটি করার জন্য প্রসারিত করেছি। নাম প্লেসে কেবল পোকো ক্লাস রাখুন, এবং টি 4 টেমপ্লেটগুলি পুনর্নির্মাণ করুন। আমি আশা করি আমি কীভাবে প্রত্যেকের জন্য পৃথক ফাইল তৈরি করতে জানি তবে এটি পৃথিবীর শেষ নয়।

আপনাকে উপরের অংশে .DLL ফাইলগুলি উল্লেখ করতে হবে (যেখানে ক্লাসগুলি হচ্ছে আপনি চান) এবং আপনাকে নামের স্থান উল্লেখ করতে হবে। সম্পাদনা করার জন্য সমস্ত লাইন ACME দিয়ে চিহ্নিত করা হয়েছে। @ সিটিকিড-এর প্রধান চুডো, এটির প্রশংসা করুন!

<#@ template debug="true" hostSpecific="true" language="C#" #>
<#@ output extension=".ts" #>
<#@ Assembly Name="System.Core.dll" #>
<#@ assembly name="$(TargetDir)YOUR_DLL_NAME_HERE_ACME.dll" #>
<#@ assembly name="$(TargetDir)YOUR_OTHER_DLL_NAME_HERE_ACME.dll" #>
<#@ assembly name="$(TargetDir)YOUR_OTHER_DLL_NAME_HERE_ACME.dll" #>
<#@ assembly name="$(TargetDir)YOUR_OTHER_DLL_NAME_HERE_ACME.dll" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Reflection" #>

<#= Process("My.Very.Special.Namespace.ACME") #>
<#= Process("My.Other.Very.Special.Namespace.ACME") #>
<#= Process("My.Other.Very.Special.Namespace.ACME") #>
<#= Process("My.Other.Very.Special.Namespace.ACME") #>

<#+  

    List<Type> knownTypes = new List<Type>();

    string Process(string nameSpace) {
      var allass = AppDomain.CurrentDomain.GetAssemblies();
      var ss = "";
      foreach (var ass in allass)
      {
         ss += ProcessAssembly(ass, nameSpace);
      }
      return ss;
    }

   string ProcessAssembly(Assembly asm, string nameSpace) {
      try {
            Type[] types;
            try
            {
                types = asm.GetTypes();
            }
            catch (ReflectionTypeLoadException e)
            {
                types = e.Types;
            }
            var s = "";
            foreach (var t in types.Where(t => t != null))
            {
               try {

               if (String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal))
               {
                    s += InterfaceOfType(t);
               }

               } catch (Exception e)
               {
               }
            }
            return s;      
      }
      catch (Exception ee2) {
        return "// ERROR LOADING TYPES: " + ee2;
      }

   }

    string InterfaceOfType(Type T)
    {   
        Type t = T;     
        var sb = new StringBuilder();
        sb.AppendFormat("interface {0} {{\r\n", t.Name);
        foreach (var mi in GetInterfaceMembers(t))
        {
            sb.AppendFormat("  {0}: {1};\r\n", this.ToCamelCase(mi.Name), GetTypeName(mi));
        }
        sb.AppendLine("}");
        knownTypes.Add(t);
        return sb.ToString();
    }

    string Interface<T>()
    {   
        Type t = typeof(T);     
        var sb = new StringBuilder();
        sb.AppendFormat("interface {0} {{\n", t.Name);
        foreach (var mi in GetInterfaceMembers(t))
        {
            sb.AppendFormat("  {0}: {1};\r\n", this.ToCamelCase(mi.Name), GetTypeName(mi));
        }
        sb.AppendLine("}");
        knownTypes.Add(t);
        return sb.ToString();
    }

    IEnumerable<MemberInfo> GetInterfaceMembers(Type type)
    {
        return type.GetMembers(BindingFlags.Public | BindingFlags.Instance)
            .Where(mi => mi.MemberType == MemberTypes.Field || mi.MemberType == MemberTypes.Property);
    }

    string ToCamelCase(string s)
    {
        if (string.IsNullOrEmpty(s)) return s;
        if (s.Length < 2) return s.ToLowerInvariant();
        return char.ToLowerInvariant(s[0]) + s.Substring(1);
    }

    string GetTypeName(MemberInfo mi)
    {
        Type t = (mi is PropertyInfo) ? ((PropertyInfo)mi).PropertyType : ((FieldInfo)mi).FieldType;
        return this.GetTypeName(t);
    }

    string GetTypeName(Type t)
    {
        if(t.IsPrimitive)
        {
            if (t == typeof(bool)) return "boolean";
            if (t == typeof(char)) return "string";
            return "number";
        }
        if (t == typeof(decimal)) return "number";            
        if (t == typeof(string)) return "string";
        if (t.IsArray)
        {            
            var at = t.GetElementType();
            return this.GetTypeName(at) + "[]";
        }
        if(typeof (System.Collections.IEnumerable).IsAssignableFrom(t)) 
        {
            var collectionType = t.GetGenericArguments()[0]; // all my enumerables are typed, so there is a generic argument
            return GetTypeName(collectionType) + "[]";
        }            
        if (Nullable.GetUnderlyingType(t) != null)
        {
            return this.GetTypeName(Nullable.GetUnderlyingType(t));
        }
        if(t.IsEnum) return "number";
        if(knownTypes.Contains(t)) return t.Name;
        return "any";
    }

    string Enums<T>() // Enums<>, since Enum<> is not allowed.
    {
        Type t = typeof(T);        
        var sb = new StringBuilder();        
        int[] values = (int[])Enum.GetValues(t);
        sb.AppendLine("var " + t.Name + " = {");
        foreach(var val in values) 
        {
            var name = Enum.GetName(typeof(T), val);
            sb.AppendFormat("{0}: {1},\r\n", name, val);
        }
        sb.AppendLine("}");
        return sb.ToString();
    }
#>

0

আমার সমাধানটি ছিল একটি ছোট কোডজেন ব্যবহার লিখে যা প্রজেক্ট অ্যাসেমব্লিকে (এবং রিফারিং অ্যাসেমব্লিগুলি) নিয়ে যায় এবং টাইপস্ক্রিপ্ট এবং সি # এর মধ্যে মিথস্ক্রিয়ায় জড়িত স্ক্যানিং প্রকারগুলি শুরু করে। এই ব্যবহারটি উভয় জাভাস্ক্রিপ্টকে d.ts হিসাবে আউটপুট করে ... সরঞ্জামটি পোস্ট-বিল্ড ইভেন্টে ডাকা হয় ... কবজির মতো কাজ করে!


আমি কেন জেএস এবং ডিএসটি আউটপুট বেছে নিয়েছি তা জানি না ... এখনই এটি কেবল .ts ... সরল এবং খুব কার্যক্ষম আউটপুট করে।
Paul0515

1
হাই পল ... আপনি কি আমাদের সাথে ব্যবহারের কোডটি ভাগ করে নিতে সক্ষম হবেন? আমি কেবল একটি টিএস ফাইল তৈরি করতে চাইছি (একটি নির্দিষ্ট ফোল্ডারের স্থানে) এবং আপনি যেমন বলেছিলেন তেমন কোনও ডিএসটি ফাইল নয়। এটি কি আপনার ব্যবহারকারীর কিছু করতে পারে ??
কৃষ্ণ তেজা বীরমচেনেনি

0

আগ্রহী হলে আপনি টাইপডআরপিসি ব্যবহার করতে পারেন । এর উদ্দেশ্য কেবল টাইপস্ক্রিপ্টে ইন্টারফেস তৈরি করা নয়, জাসনআরপিসি প্রোটোকলটি ব্যবহার করে নেট N

সার্ভারে একটি শ্রেণীর উদাহরণ:

[TypedRpc.TypedRpcHandler]
public class RpcServerExample
{
    public String HelloWorld()
    {
        return "Hello World!";
    }
}

উত্পন্ন টাইপস্ক্রিপ্ট কোডের ব্যবহার:

/// <reference path="Scripts/TypedRpc.ts" />

let rpc: TypedRpc.RpcServerExample = new TypedRpc.RpcServerExample();

var callback = function(data, jsonResponse) {
    console.log(data);
};

rpc.HelloWorld().done(callback).fail(callback);

এটি কীভাবে ব্যবহার করতে হয় তার অন্যান্য উদাহরণগুলির জন্য https://github.com/Rodris/TypeedRpc দেখুন ।


0

এএসপি.এনইটি ওয়েব এপিআই ক্লায়েন্ট জেনারেটর এসডিএলসি চলাকালীন সোয়াগার টুলচেইন এবং অন্যদের চেয়ে আরও বেশি সহজ, কম ওভারহেড হতে পারে।

প্রোগ্রামাররা সাধারণত ক্লায়েন্ট এপিআই কোড উত্পন্ন করতে WebApiClientGen ব্যবহার করে, এই প্রকল্পটি POCO2TS.exe, একটি কমান্ড লাইন প্রোগ্রামও সরবরাহ করে যা পোকো ক্লাস থেকে টাইপসক্রিপ্ট ইন্টারফেস জেনারেট করে। আপনি আপনার বিল্ড পাইপলাইনের সাথে কোড প্রজন্মকে সংহত করতে Poco2ts.exe বা poco2ts উপাদানটি ব্যবহার করতে পারেন।


0

আপনি যদি নোড.জেএস এর মাধ্যমে রূপান্তর করতে চান তবে আপনি এই প্যাকেজটি (csharp-to-typcript) ব্যবহার করতে পারেন। https://www.npmjs.com/package/csharp-to-typescript

স্যুরকোড: https://github.com/YuvrajSagarRana/csharp-to-typescript

eg: 
// After installation, import the package.
var { CsharpToTs, getConfiguration } = require("csharp-to-typescript");

// Use CsharpToTs to convert your source code a. Method one give your source code as string:
const sourceCodeInString =   `public class Address
{
  public int Id {get; set;}
  public string Street { get; set; }
  public string City { get; set; }
}`

var outputTypescript = CsharpToTs(sourceCodeInString, getConfiguration());
console.log(outputTypescript);

// Output is

export class Address
{
  Id: number;
  Street: string;
  City: string;
}

0

আপনি যদি ভিএসকোড ব্যবহার করে থাকেন তবে আপনি সেই এক্সটেনশন সি # তে টাইপস্ক্রিপ্টে একবার দেখে নিতে পারেন

সি # শ্রেণিকে টাইপস্ক্রিপ্ট ইন্টারফেসে রূপান্তর করুন

আমি কীভাবে একে ক্লিক করে সি # কোড থেকে রূপান্তর করতে পারি তা দেখুন। অবশ্যই, সমস্ত ক্লাস যেমন কারখানার মতো রূপান্তরিত হবে না তবে এটি ক্লায়েন্ট-পক্ষের পক্ষে যথেষ্ট ভাল। আমাদের কেবলমাত্র ডেটার আকার দরকার। কখনও কখনও যদি আমাকে ভিজিটর প্যাটার্নটি ব্যবহার করতে হয়, আমি আমার প্রয়োজনীয় অতিরিক্ত পদ্ধতিগুলি সজ্জিত করব। এটি করতে কেবল 5 সেকেন্ডের মতো সময় লেগেছে। উপরের এক মিনিটের সাথে তুলনা করে, আমি বলতে পারি এটি একটি বড় জয়।

আমার ব্লগ পোস্টে আরও বিস্তারিত দেখুন

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