子组件:封装好的timePicker组件,
父组件A: 大数据查询,因为存储在es里,接口参数要求时间类型是 number[]
父组件B: 系统日志查询,因为存储普通数据库,接口参数要求时间类型为 string[]
实例:
子组件
<template>
<a-range-picker
v-model:value="myvalue"
format="YYYY-MM-DD HH:mm:ss"
:value-format="format"
:default-value="[dayjs().startOf('day'), dayjs()]"
@change="handleChange"
/>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import dayjs from 'dayjs';
type DateType = (Date | string | number | dayjs.Dayjs)[];
interface Prop {
format?: string;
range?: boolean;
}
withDefaults(defineProps<Prop>(), {
format: 'YYYY-MM-DD HH:mm:ss',
range: false,
});
const myvalue = ref<DateType>([dayjs().startOf('day'), dayjs()]);
const emits = defineEmits<{
(e: 'emitchange', value: DateType): void;
}>();
function handleChange(val: DateType) {
emits('emitchange', val);
}
</script>
父组件A:
<template>
<my-date-picker
:format="'X'"
@emitchange="handleDateChange"
/>
</template>
<script lang="ts" setup>
import dayjs from 'dayjs';
// 接口查询 日期必须是 number
type DateType = number[];
const dateParams = ref<DateType>([
dayjs().startOf('day').unix(),
dayjs().unix(),
]);
function handleDateChange(val: DateType) {
dateParams.value = val;
}
</script>
父组件B:
<template>
<my-date-picker
@emitchange="handleDateChange"
/>
</template>
<script lang="ts" setup>
import dayjs from 'dayjs';
// 接口查询 日期必须是 string
type DateType = string[];
const dateParams = ref<DateType>([
dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss'),
dayjs().format('YYYY-MM-DD HH:mm:ss'),
]);
function handleDateChange(val: DateType) {
dateParams.value = val;
}
</script>
在 A 中,format 值为 ‘X’ 那么子组件的val默认为unix,也就是number
在 B 中,format 无值,那么子组件的val默认值为'YYYY-MM-DD HH:mm:ss',也就是string
报错信息为
`(property) 'emitchange': (value: DateType) => void
不能将类型“(val: DateType) => void”分配给类型“(value: DateType) => void”。
参数“val”和“value” 的类型不兼容。ts(2322)`
template 这种写法 父组件 都没法识别子组件的Props 类型 怎么还想传递泛型
TSX 可以传递泛型