tslint / codelyzer / এনজি লিন্ট ত্রুটি: "(… ইন…) স্টেটমেন্টের জন্য অবশ্যই যদি একটি বিবৃতি দিয়ে ফিল্টার করা হয়"


229

লিঙ্ক ত্রুটি বার্তা:

src / app / বিস্তারিত / edit / edit.componal.ts [১১১, ৫]: এর জন্য (... ইন ...) স্টেটমেন্ট অবশ্যই যদি একটি বিবৃতি দিয়ে ফিল্টার করতে হয়

কোড স্নিপেট (এটি একটি কার্যকরী কোড It এটি কৌণিক.ও ফর্ম বৈধকরণ বিভাগে পাওয়া যায় ):

for (const field in this.formErrors) {
      // clear previous error message (if any)
      this.formErrors[field] = '';
      const control = form.get(field);

      if (control && control.dirty && !control.valid) {
        const messages = this.validationMessages[field];
        for (const key in control.errors) {
          this.formErrors[field] += messages[key] + ' ';
        }
      }
    }

এই লিঙ্ক ত্রুটি কিভাবে ঠিক করবেন কোনও ধারণা?


কোনও উত্তর গ্রহণ করতে পারেন?
কিওয়ারটি

উত্তর:


241

করার প্রকৃত সমস্যা ব্যাখ্যা যে tslint ইশারা করা হয়, এর জাভাস্ক্রিপ্ট ডকুমেন্টেশন থেকে উদ্ধৃতি জন্য ... বিবৃতিতে :

লুপটি বস্তুর নিজেই সমস্ত অঙ্কিত গুণাবলী এবং এটির নির্মাণকারীর প্রোটোটাইপ (প্রোটোটাইপ চেইন ওভাররাইড প্রোটোটাইপের বৈশিষ্ট্যগুলির মধ্যে বস্তুর নিকটবর্তী বৈশিষ্ট্যগুলি) থেকে উত্তরাধিকার সূত্রে পুনরুত্থিত হবে।

সুতরাং, মূলত এর অর্থ হল আপনি এমন সম্পত্তি পাবেন যা আপনি প্রত্যাশা করতে পারেন না (বস্তুর প্রোটোটাইপ চেইন থেকে)।

এটি সমাধান করার জন্য আমাদের কেবলমাত্র বস্তুর নিজস্ব বৈশিষ্ট্যগুলি নিয়ে পুনরাবৃত্তি করতে হবে। আমরা এটি দুটি ভিন্ন উপায়ে করতে পারি (@ ম্যাক্সএক্সএক্সএক্সএক্স এবং @ কিওয়ার্টি দ্বারা প্রস্তাবিত)।

প্রথম সমাধান

for (const field of Object.keys(this.formErrors)) {
    ...
}

এখানে আমরা অবজেক্ট.কিজ () পদ্ধতিটি ব্যবহার করি যা প্রদত্ত বস্তুর নিজস্ব সংখ্যাযুক্ত বৈশিষ্ট্যগুলির একটি অ্যারে প্রদান করে, একই ক্রমে একটি লুপের জন্য ... এর জন্য সরবরাহ করা হয় (পার্থক্যটি হ'ল লুপের জন্য বৈশিষ্ট্যগুলি গণনা করে) প্রোটোটাইপ চেইন)।

দ্বিতীয় সমাধান

for (var field in this.formErrors) {
    if (this.formErrors.hasOwnProperty(field)) {
        ...
    }
}

এই দ্রষ্ট্রে আমরা প্রোটোটাইপ চেইনের সমেত সামগ্রীর সমস্ত বৈশিষ্ট্য পুনরুক্ত করি কিন্তু অবজেক্ট.প্রোটোটাইপ.হাসনপ্রোপার্টি () পদ্ধতিটি ব্যবহার করি , যা ফিল্টার করার জন্য বস্তুর নিজস্ব সম্পত্তি (উত্তরাধিকারসূত্রে নয়) হিসাবে নির্দিষ্ট সম্পত্তি আছে কিনা তা নির্দেশ করে একটি বুলিয়ান দেয় উত্তরাধিকারসূত্রে প্রাপ্ত সম্পত্তি


2
আমি খেয়াল করতে চাই যে Object.keysES5। ES6 থেকে একমাত্র জিনিসটি হ'ল অন লুপ। আমরা 0 থেকে এর দৈর্ঘ্যে স্বাভাবিক লুপে অ্যারের পুনরাবৃত্তি করতে পারি এবং এটি ES5 হবে।
কিওয়ারটি

4
আরও একবার বিজ্ঞপ্তি: যদি কোনওভাবে this.formErrorsশূন্য হয় তবে for...inকেবল কিছু করবেন না, যখন for ... of Object.keys()ত্রুটি ছুঁড়ে মারবেন।
ব্যবহারকারী 3448806

আমি দ্বিতীয় সমাধান অনুসরণ করছি কিন্তু তবুও আমি লিঙ্ক বার্তাটি দেখতে পাচ্ছি। আপাতত অক্ষম লিঙ্ক।
raj240

2
আপনি সুপারিশ করবেন না কেন Object.keys(obj).forEach( key => {...}) ?
বেন কার্প

268

@ হেলজগেটের উত্তরটি প্রয়োগের একটি সুস্পষ্ট উপায় সম্ভবত আপনার 'for .. in' এর সাথে প্রতিস্থাপন করা

for (const field of Object.keys(this.formErrors)) {

6
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত কারণ এটি কেবল সমস্যার সমাধান করে না, অতিরিক্ত শর্তাবলীর তুলনায় এটি বয়লারপ্লেট কোডের পরিমাণও হ্রাস করে if (this.formErrors.hasOwnProperty(field))
Denialos

1
উত্তরটি সম্পর্কে সতর্ক থাকুন, এটি আপনার কোডগুলি ভঙ্গ করতে পারে। এটি "ঠিক" করার পরে পরীক্ষা করুন।
জেডজেডজ

3
এটি আসলে আমার জন্য স্লিন্ট ত্রুটি সরিয়ে দেয় না।
হামারএন'সংস

7
@ HammerN'Songs চেক করুন যে আপনার জন্য পরিবর্তিত এর জন্য পরিবর্তে মধ্যে
টম

এখানে একই সমস্যা। এটি ব্যবহারের পরে ত্রুটি সরানো হয় না
llamerr

71
for (const field in this.formErrors) {
  if (this.formErrors.hasOwnProperty(field)) {
for (const key in control.errors) {
  if (control.errors.hasOwnProperty(key)) {

13

অবজেক্ট.কিগুলি ব্যবহার করুন:

Object.keys(this.formErrors).map(key => {
  this.formErrors[key] = '';
  const control = form.get(key);

  if(control && control.dirty && !control.valid) {
    const messages = this.validationMessages[key];
    Object.keys(control.errors).map(key2 => {
      this.formErrors[key] += messages[key2] + ' ';
    });
  }
});

2

যদি আপনার উদ্দেশ্যে (... ইন ...) এর আচরণটি গ্রহণযোগ্য / প্রয়োজনীয় হয় তবে আপনি স্লিন্টকে এটির অনুমতি দিতে বলতে পারেন।

tslint.json এ, এটি "বিধি" বিভাগে যুক্ত করুন।

"forin": false

অন্যথায়, @ ম্যাক্সক্সিক্সের সাথে সঠিক ধারণা আছে

for (const field of Object.keys(this.formErrors)) {

0

আমি মনে করি এই বার্তাটি ব্যবহার করা এড়ানো সম্পর্কে নয় switch। পরিবর্তে এটি আপনার জন্য চেক করতে চায় hasOwnProperty। পটভূমিটি এখানে পড়তে পারেন: https://stackoverflow.com/a/16735184/1374488

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