【发布时间】:2021-12-22 15:22:48
【问题描述】:
假设我有一个元素,它包装了一个输入并获取了它的所有属性,此外还有一些属性。
在反应中,这将被键入
interface ExtendedInputProps extends React.ComponentPropsWithoutRef<'input'> {
some: Type
}
这是一个非常常见的用例。我知道 Vue 3 根据传递给 defineComponent 中 props: 对象的任何内容生成其 prop 类型。
我正在想象做类似的事情:
props:{
...getComponentProps('input')
additionalProp: String
}
但我不知道该怎么做,也找不到任何文档。有可能吗?
【问题讨论】:
-
您是否尝试为打字稿类型检查做更多的事情,或者您不必手动/显式定义所有第二个对象属性?
-
是的。如果你传入一个未识别的属性,vue 不会抛出运行时警告吗?我正在构建将用作库的一部分的组件。打字和用户体验需要很好,这不能是一个简陋的界面
-
是的,我可以完全省略 props 并使用
defineComponent<SomeInterface>上的类型参数/泛型设置 props 类型,但是 Vue 似乎阻止任何 props 实际到达我的组件,因为它们没有明确定义在运行时。 -
我认为您不想将所有原生
input属性声明为包装组件的道具,因为这需要您在模板或渲染函数中“手动”绑定它们。最好使用Non-Prop Attributes
标签: typescript vue.js vuejs3