vue PropType不考虑未定义的可选属性

5w9g7ksd  于 2022-10-28  发布在  其他
关注(0)|答案(7)|浏览(271)

版本

2.6.11

重现步骤

创建可选属性为对象的组件并尝试访问其属性

import Vue, { PropType } from 'vue';

Vue.extend({
  props: {
    container: Object as PropType<{ n: number }>,
    // or container: Number
  },

  mounted () {
    // should fail because this.container could be undefined
    console.log(this.container.n);
  },
});

需要什么?

TS错误:对象可能未定义

到底发生了什么?

无错误
注意事项
它与Composition API插件一起按预期工作

r7xajy2e

r7xajy2e1#

@posva你的意思是Vue的行为是正确的,而VCA的行为是错误的?

w7t8yxp5

w7t8yxp52#

你好@jacekkarczmarczyk,Object as PropTypeVCA<{ foo: number }>是干什么用的?
您的意思是:

defineComponent({
  props: {
    foo: {
      type: Number
    }
  },
  setup (props) {
    console.log(props.foo) // number | undefined  in both VCA and vue-next
  },
})
uqxowvwt

uqxowvwt3#

我最初在vue repo(而不是vue-next)中创建了这个问题,我不知道为什么@posva将其移到这里
在普通视图中,您的示例显示为number,但恕我直言,它应该是number | undefined,就像VCA和vue-next中一样

yfjy0ee7

yfjy0ee74#

抱歉,因为您关注的是composition-api错误,这让我感到困惑

kqlmhetl

kqlmhetl5#

是的,我想我没有把实际问题强调得足够清楚,对不起,谢谢

o4tp2gmn

o4tp2gmn6#

BWT -由于type: Number也重现了这个问题,我认为问题标题中的PropType是没有必要的,虽然不确定什么标题会更合适

ltskdhd1

ltskdhd17#

我编辑了代码示例,以使其不包含Composition API插件

相关问题