堆栈:vuejs(3.2)+ composition API + Typescript + Visual studio代码
文件类型.ts:
export class GeographicCoordinate {
latitude: number;
longitude: number;
altitude?: number;
constructor(latitude: number, longitude: number, altitude?: number) {
this.latitude = latitude;
this.longitude = longitude;
this.altitude = altitude;
}
}
component1.vue:
import { GeographicCoordinate } from '@/interfaces/type';
const props = defineProps({
show: { type: Boolean, required: true },
geographicCoordinate: {
type: Object as PropType<GeographicCoordinate | null>,
required: true }
});
page.vue:
<template>
<component1
v-model:show="show"
:geographic-coordinate="clickedGeographicCoordinate" @save-event="saveEvent">.
</component1>
</template>
<script lang="ts" setup>
import { GeographicCoordinate } from '@/interfaces/type';
var show = ref(false);
var clickedGeographicCoordinate = ref<GeographicCoordinate | null>(null);
</script>
clickedGeographicCoordinate变量初始化为null。而clickedGeographicCoordinate是由用户点击生成的。
变量show用于控制component1的可见性。当show设置为true时,clickedGeographicCoordinate保证不为null。现在这里的问题是,vue在浏览器中提出警告说
[Vue warn]:无效属性:属性“geographicCoordinate”的类型检查失败。应为Object,但得到Null
该如何处理这种情况?
2条答案
按热度按时间vd8tlhqk1#
如果您使用的是Typescript组合API,您应该能够这样定义您的props:
使用Typescript定义可以更容易地定义 prop 类型并使用
null
作为 prop 类型。如果你碰巧在API中使用null
作为prop类型,它只会在运行时禁用prop类型检查。此外,您可以根据是否定义了
geographicCoordinate
有条件地显示组件,这样您就不需要Assert和检查这两种类型是否都可以在组件中使用ryevplcw2#
可以通过v-if处理component 1的可见性,当show为false或geographicCoordinate为null时,组件不显示和处理数据。