网站搜索

javascript - 在 TypeScript 中扩展 Vuetify 组件


我正在尝试在 TypeScript 中扩展一个 Vuetify 组件,并设置一些默认的 props。在 JavaScript 中它工作得非常好,但我无法弄清楚如何在 TS 中扩展组件。以下是 JS 中组件的代码:

import { VTextField } from 'vuetify/lib'

export default {
  name: "my-text-field",
  extends: VTextField,
  props: {
      "hide-details": {
        type: Boolean,
        default: true
      },
      outlined: {
        type: Boolean,
        default: true
      },
      dense: {
        type: Boolean,
        default: true
      },
      "single-line": {
        type: Boolean,
        default: true
      },
      color: {
        type: String,
        default: "secondary"
      }
  }
}

答案#1

在 tsconfig.json 中添加的正确方法

// tsconfig.json

{
  "compilerOptions": {
    "types": ["vuetify"]
  }
}

现在只需扩展必要的组件。

<script lang="ts">
import { VTextField } from 'vuetify/lib'

import { Component,  Prop } from 'vue-property-decorator'

@Component({})
export default class TextField extends VTextField {
    @Prop({default: 'auto'}) private hideDetails!: boolean|string;
    @Prop({default: true}) private outlined!: boolean;
    @Prop({default: true}) private dense!: boolean
    @Prop({default: true}) private singleLine!: boolean;
    @Prop({default: 'secondary'}) private color!: string
}
</script>

答案#2

我通过查看 Vuetify 的 VTextArea 组件找到了一个解决方案。以下是我的解决方案:

import Vue from 'vue'
//@ts-ignore
import VTextField from 'vuetify/lib/components/VTextField/VTextField'

// Create Base Mixins and Define Custom Properties
const base = Vue.extend({ mixins: [VTextField] })
export default base.extend({
  name: "my-text-field",
  props: {
      hideDetails: {
        type: Boolean,
        default: true
      },
      outlined: {
        type: Boolean,
        default: true
      },
      dense: {
        type: Boolean,
        default: true
      },
      singleLine: {
        type: Boolean,
        default: true
      },
      color: {
        type: String,
        default: "secondary"
      }
  }
})