Javascript 应为T,在自定义对象类型的Vue属性中获取了对象 描述
你好 我想使用bit.dev共享我的Vue组件 我得到了如下的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: {
<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';