【发布时间】:2021-12-31 00:57:12
【问题描述】:
假设我有 2 个组件:
待办事项:
export default defineComponent({
name: 'todoItem',
props: {
name: {
type: String,
required: true,
},
isCompleted: {
type: Boolean,
required: false,
default: false,
},
},
});
我想做以下事情 待办事项列表:
import TodoItem from './TodoItem.vue';
export default defineComponent({
name: 'todoList',
props: {
todos: {
type: Array<TodoItem>, // Gives an error
required: false,
},
},
components: {
TodoItem,
},
});
有没有办法可以做到以下几点? 我可以通过执行以下操作将其“复制”为打字稿界面:
interface Todo: {name: String, isCompleted: Boolean}
// then do
type: Array as PropType<Todo[]>
但它是重复的代码,每次有变化时我都需要重构它。
有没有更好的办法?
【问题讨论】:
-
从代码中不清楚
todos到底会做什么。你能举个例子吗? -
我 认为 例如,您可以在文件
src/typings/todo.d.ts中定义类型(据说它会自动从src/typings读取,但我还没有达到我的目的已经试过了。 -
@EstusFlask todos 将被解构为 todoItems。
-
我认为您的界面是正确的。这是一个业务逻辑问题,因此您应该有某种业务逻辑数据模型。然后在最后将其转换为 TodoItem 组件。 UI 和业务逻辑是分开的,所以他们不需要在这个级别共享代码。
-
这个不多解释。
todos是否包含组件本身?还是引用组件实例?请提供如何使用此道具的示例。不清楚应该如何正确输入。
标签: typescript vue.js vue-component vuejs3