为 Vue props 创建类型的正确方法是什么

kry*_*ton 7 typescript vue.js typescript-typings nuxt.js vue-props

我正在尝试type在 Vue js 中为我的 prop 创建自定义,我创建了一个 types 文件夹并将其添加到tsconfig.typeRootsIntelliSense 中,所有其他内容都正常工作,编译时没有问题,但是当我访问该组件时,我收到一个错误,Car is not defined但我已经定义了它并且它可以在其他地方工作,但在检查官方文档后,我知道 prop 需要 a constructor 所以我重新定义了类型declare class Car并添加了构造函数原型,但又出现了同样的问题。

以下是文件: 汽车组件

<script lang="ts">
import Vue from "vue";

export default Vue.extend({
  name: "the-car",
  props: {
    car: {
      required: true,
      type: Car,
    },
  },
});
</script>
Run Code Online (Sandbox Code Playgroud)

声明types/common/index.d.ts文件

declare class Car {
    name: String;
    image: String;
    kms: Number;
    gears: String;
    desc: String;
    fuel: String;
    engine: String;
    price: Number;
    constructor(name: String, image: String, kms: Number, gears: String, desc: String, fuel: String, engine: String, price: Number);
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*ape 30

诸如type: Car或 之类的类型声明type: Object as Car将不起作用,因为在 Vue 中,它提供了附加功能,例如 prop 验证,这超出了您在 Typescript 中获得的标准类型检查。

虽然type: Object as () => Car可行,但处理此问题的正确方法是使用 Vue 的辅助方法PropType

import { PropType } from 'vue'

props: {
  car: {
    type: Object as PropType<Car>,
    required: true,
  },
},
Run Code Online (Sandbox Code Playgroud)

检查Vue.js 中的Typescript 支持文档 (v2) ( v3 ),了解有关注释 props 的更多信息。