type stringKey = 'date' | 'dateTime' | 'endTime' | 'startTime'
type stringParams = Record<stringKey, string>
type numberKey = 'dateType' | 'a'
type numberParams = Record<numberKey, number>
export type reqParams = stringParams & numberParams
export let obj: reqParams = {
}
type oneOf<T extends string, P extends string> =
| ({
[K in T]: string;
} & {
[K in P]?: never;
})
| ({
[K in P]: string;
} & {
[K in T]?: never;
});
type startTime = oneOf<'startTime', 'startDate'>
type stringKey = 'date' | 'dateTime'
type stringParams = Record<stringKey, string>
type reqParams = stringParams & startTime
let obj: reqParams = {
date: 'date',
dateTime: 'dateTime',
startTime: 'startTime'
}
let obj1: reqParams = {
date: 'date',
dateTime: 'dateTime',
}
type reqParams1 = Omit<stringParams & startTime, ''>
// 这个应该报错才符合需求, 类似obj1
let obj2: reqParams1 = {
date: 'date',
dateTime: 'dateTime',
}
let obj3: reqParams1 = {
date: 'date',
dateTime: 'dateTime',
startTime: 'startTime'
}
改一行即可
TS会尽量保留你原来的结构,
别名
让提示看起来更舒适和优雅。现在我们这么做就是打断了原来的别名然后把所有东西揉杂在一起。