جافاسكريبت - Riotjs (Riot typescript) لا يمكنه كتابة طريقة على فئة Typescript


هذا غريب. ماذا أفعل خطأ؟

class Store extends Riot.Observable {
  trigger():void {
   // shouldn't this be completely overwriting the trigger method on riot.observable? 
   console.log("my trigger....");
  }
}

let store = new Store();
store.trigger();

السلوك المتوقع: "my trigger...." في وحدة التحكم. ما أحصل عليه هو التنفيذ الأصلي لـ trigger على Riot.Observable، والذي يعطي خطأ بسبب عدم تمرير أي معلمات.

إذا قمت بالضغط على كائن store، أستطيع أن أرى أن store.__proto__ يحتوي على الدالة trigger هناك، مع تنفيذي الخاص. لكن store نفسه لديه نسخة خاصة به (الأصلية) من trigger()

يرجى زيارة https://jsfiddle.net/sidouglas/5spbvpnn/

لقد أشرت إلى هذا بمثال بسيط جدًا، ولا أعرف ما الذي يحدث.

الإجابة رقم 1

استنادًا إلى المصدر، لا تستفيد الملاحظات في Riot من الوراثة النمطية. فهي تعمل كمزج بدلًا من ذلك. فئة التغليف في TypeScript تستدعي فقط مزج Riot الأصلي. لتجاوز دالة ما، يجب عليك تعيينها إلى الكائن:

class Store extends Riot.Observable {
    constructor() {
        this.trigger = function() {
            console.log("My trigger");
        };
    }
}

let store = new Store();
store.trigger();