টাইপস্ক্রিপ্ট টাইপ করা অ্যারের ব্যবহার


98

আমার টাইপস্ক্রিপ্ট শ্রেণির সংজ্ঞা রয়েছে যা এর আগে শুরু হয়;

module Entities {          

    export class Person {
        private _name: string;
        private _possessions: Thing[];
        private _mostPrecious: Thing;

        constructor (name: string) {
            this._name = name;
            this._possessions = new Thing[100];
        }

থিংয়ের ধরণের অ্যারের মতো মনে হচ্ছে সংশ্লিষ্ট জাভাস্ক্রিপ্ট অ্যারে টাইপের সাথে সঠিকভাবে অনুবাদ হয় না। এটি উত্পন্ন জাভাস্ক্রিপ্ট থেকে একটি স্নিপেট:

function Person(name) {
    this._name = name;
    this._possessions = new Entities.Thing[100]();
}

কোনও ব্যক্তির অবজেক্টযুক্ত কোড সম্পাদন, _ অবস্থান ক্ষেত্রটি আরম্ভ করার চেষ্টা করার সময় একটি ব্যতিক্রম নিক্ষেপ করুন:

ত্রুটিটি "0x800a138f - মাইক্রোসফ্ট JScript রানটাইম ত্রুটি: সম্পত্তি '100' এর মান পেতে অক্ষম: অবজেক্ট নাল বা অপরিজ্ঞাত"।

যদি আমি _possession এর ধরণটি পরিবর্তন করি any[] এবং new Array()ব্যতিক্রম সহ _possession শুরু করি তবে তা নিক্ষেপ করা হয় না। আমি কি কিছু রেখে গেলাম?

উত্তর:


122

আপনার সিনট্যাক্সে এখানে ত্রুটি রয়েছে:

this._possessions = new Thing[100]();

এটি "জিনিসের অ্যারে" তৈরি করে না। জিনিসগুলির একটি অ্যারে তৈরি করতে, আপনি কেবল অ্যারে আক্ষরিক ভাবটি ব্যবহার করতে পারেন:

this._possessions = [];

আপনি দৈর্ঘ্য নির্ধারণ করতে চাইলে অ্যারে নির্মাণকারীগুলির মধ্যে:

this._possessions = new Array(100);

আমি খেলার মাঠে চেষ্টা করতে পারেন একটি সংক্ষিপ্ত কাজের উদাহরণ তৈরি করেছি ।

module Entities {  

    class Thing {

    }        

    export class Person {
        private _name: string;
        private _possessions: Thing[];
        private _mostPrecious: Thing;

        constructor (name: string) {
            this._name = name;
            this._possessions = [];
            this._possessions.push(new Thing())
            this._possessions[100] = new Thing();
        }
    }
}

4
এটি দৈর্ঘ্যটি স্থির করে না, বরং অ্যারেটিকে পূর্বনির্ধারণ করা উচিত
সেবাস্তিয়ান

আপনি private _possessions: Thing[] : []; ক্লাস সংজ্ঞা কেন করতে পারবেন না ?
সুপারউবারডুপার

55

আপনি এইগুলির মধ্যে যে কোনও একটি চেষ্টা করতে পারেন। তারা আমাকে ত্রুটি দিচ্ছে না।

অ্যারে ঘোষণার জন্য এটি টাইপস্ক্রিপ্ট থেকে প্রস্তাবিত পদ্ধতিও ।

Array<Thing>এটি ব্যবহার করে টাইপ স্ক্রিপ্টে জেনেরিকগুলি ব্যবহার করা হচ্ছে। এটি List<T>সি # কোডের অনুরোধের অনুরূপ ।

// Declare with default value
private _possessions: Array<Thing> = new Array<Thing>();
// or
private _possessions: Array<Thing> = [];
// or -> prefered by ts-lint
private _possessions: Thing[] = [];

বা

// declare
private _possessions: Array<Thing>;
// or -> preferd by ts-lint
private _possessions: Thing[];

constructor(){
    //assign
    this._possessions = new Array<Thing>();
    //or
    this._possessions = [];
}

4
আকার preallocon করতে, ব্যবহার করুন new Array<Thing>(100)
ডগ ডোমেনি

4
এছাড়াও আপনি ব্যবহার করতে পারেন ... <থিংং> []
danday74

@ danday74 - আমি আপনার পদ্ধতিটি অন্তর্ভুক্ত করতে আপডেট করেছি, ts-lint recomemented / সর্বশেষতম কনফিগারেশন ব্যবহার করার সময় এটি ডিফল্ট।
কাইরান

9

অনুবাদটি সঠিক, প্রকাশের টাইপিং এটি নয়। টাইপসক্রিপ্টটি ভুলভাবে new Thing[100]একটি অ্যারে হিসাবে অভিব্যক্তি টাইপ করছে । Thingসূচক অপারেটরটি ব্যবহার করে এটি একটি ত্রুটি হতে হবে , একটি নির্মাণকারী ফাংশন। সি # এ এটি 100 টি উপাদানের একটি অ্যারে বরাদ্দ করবে। জাভাস্ক্রিপ্টে এটি সূচককে 100 এর মানকে কল করে Thingযেমন একজন নির্মাতা। যেহেতু মানগুলি হ'ল undefinedএটি আপনার উল্লেখ করা ত্রুটি উত্থাপন করে। জাভাস্ক্রিপ্ট এবং টাইপস্ক্রিপ্ট new Array(100)পরিবর্তে আপনি চান ।

কোডপ্লেক্সে আপনার বাগ হিসাবে এটি প্রতিবেদন করা উচিত।


4
আমি নতুন অ্যারে (100) চাই না। আমি থিংয়ের একটি টাইপযুক্ত অ্যারে চাই। আমি জানি না এটি কোনও ত্রুটিযুক্ত বা দস্তাবেজ অনুমানের আমার ভুল ব্যাখ্যা in
ক্লাউস এনজি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.