typescript - vue类组件继承,方法来自基类 "is not a function"

标签 typescript inheritance vuejs2 storybook vue-class-components

我正在尝试制作 class inheritancedefining stories for storybook 时避免代码冗余因为我有很多场景(故事)需要用更少/更多的数据相似性来覆盖。我正在使用 vue-class-component 方法 vue-property-decorator定义组件。

这是一个例子:

//myStory.stories.ts file
import Vue from 'vue'
import {Component} from 'vue-property-decorator'
import {store} from 'path/to/stores'
import Vuex from 'vuex'

const BaseOptions = {
  components: {Component1, Component2},
  template: MyTemplate,
  store: new Vuex.Store<IRootState>(store)
}

class BaseClass extends Vue {
  public method1() {
    console.log("call from method 1")
  }
  // I want to customize many methods here in BaseClass: method2, method3, etc
}

// Story book page
export default {
  title: 'My/Page',
  // Our exports that end in "Data" are not stories.
  excludeStories: /.*Data$/,
}

// Defining storybook stories:
export const ScenarioOne = () => (
  @Component<any>(
    {
      ...BaseOptions,
      mounted() {
        this.method1()
      },
    }
  )
  class CurrentClass extends BaseClass {} // This isn't working >> error: _this4.method1 is not a function
)


export const ScenarioTwo = () => (
  @Component<any>(
    {
      ...BaseOptions,
      mounted() {
        this.method1()
      },
    }
  )
  class CurrentClass extends BaseClass {
    // If I redefine the method1(), it's working
    public method1() {
       console.log("call from method 1 (redefined)")
    }
  }
)

为什么我的 scenarioOne 无法调用 method1()scenarioTwo 可以?

最佳答案

您也必须将基类定义为 @Component({}),以及继承链中的所有类,因此:

import Vue from "vue";
import Component from "vue-class-component";

@Component({})
class BaseClass extends Vue {
}

@Component({})
class SubClass extends BaseClass {
}

关于typescript - vue类组件继承,方法来自基类 "is not a function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63004313/

相关文章:

javascript - Vue $on 事件第一次使用事件总线时不会触发

typescript :compilerOptions.outDir 和非 ts 模块

inheritance - 为什么将实例声明为父类(super class)型但将其实例化为子类型,加上里氏替换原则

javascript - 如何从Vue js中的App.vue获取Main.js中的数据?

JavaScript super.constructor() 抛出 "must call before accessing this"异常

java - 从父类继承时如何更改其构造函数的一部分?

node.js - 在 Vue.js 中找不到这些依赖项错误

html - 如何在 doc.fromhtml() jspdf 中包含 Angular 组件?

javascript - 使用 Expo 和 Typescript 创建StackNavigator,不渲染任何内容

javascript - Typescript 日期减法结果为 0,而不是实际的时间差。