Javascript 应为T,在自定义对象类型的Vue属性中获取了对象 描述

Javascript 应为T,在自定义对象类型的Vue属性中获取了对象 描述,javascript,vue.js,vuejs2,bit.dev,Javascript,Vue.js,Vuejs2,Bit.dev,你好 我想使用bit.dev共享我的Vue组件 我得到了如下的Vue组件: <template> ... </template> <script> import CustomItem from "../../../../objects/CustomItem"; export default { name: "Test", props: { item: {

你好

我想使用bit.dev共享我的Vue组件

我得到了如下的Vue组件:

<template>
    ...
</template>

<script>

import CustomItem from "../../../../objects/CustomItem";

export default {
    name: "Test",
    props: {
        item: {
            type: CustomItem,
        },
    },
};
</script>
props:{item:{type:function t(e){var n=e.id,r=e.name})...
这在我的项目中效果很好,但如果我以这种方式包括:

<template>
    <div v-if="!$wait.is('item.loading')">
        <MyComponent :item="item"/>
    </div>
</template>

<script>
import MyComponent from '@bit/myproject.my-component'
import CustomItem from '@bit/myproject.custom-item';

export default {
    name: 'Home',
    components: {MyComponent},
    data () {
        return {
            item: {}
        };
    },
    beforeRouteEnter (to, _from, next) {
        const promises = [
            axios.get (`/api/item/1`)
        ];

        next (vm => {
            vm.$wait.start ('item.loading');
            axios.all (promises)
            .then (([itemRes]) => {
                vm.item = new CustomItem(itemRes.data.data);
            }).finally(()=>{
                vm.$wait.end ('item.loading');
            });
        });
    },
};
</script>

所以我想这就是为什么会发生这种情况。

基本上,在您的项目中实际上有两个类
CustomItem

  • 您相对导入的:
  • 以及作为外部包导入的:
因此,当您将导入统一到一个表单时,我会首先检查它是否有效:

import CustomItem from '@bit/myproject.custom-item';

但是,有时候事情并不简单,甚至这对您也没有帮助-有时候,即使以这种方式引用
CustomItem
,也不能保证在您的生产代码库中不会有多个
CustomItem
。如果检查道具的类型真的很重要的话,我建议的解决方案是强制执行。您仍然无法使用JS,因为它无法工作,即使检查
item.prototype.name===“CustomItem”
也不是一个好主意,因为在代码最小化过程中类名会发生更改,所以duck类型似乎是您唯一合理的解决方案。

谢谢您的回答。我更新了我的问题,因为我在编译的共享位模块中找到了“T”。所以我想我真的需要做一些“鸭子打字”。
props:{item:{type:function t(e){var n=e.id,r=e.name})...
import CustomItem from "../../../../objects/CustomItem";
import CustomItem from '@bit/myproject.custom-item';
import CustomItem from '@bit/myproject.custom-item';